布局定义用户界面的可视结构,例如活动,片段或应用程序窗口小部件的UI。
我目前正在尝试为 Android 应用程序实现边缘到边缘,并使用本指南成功完成了它(https://developer.android.com/training/gestures/edge-to-edge#lay-完全出-
FrameLayout 与 NestedScrollView 的高度不匹配
我在 NestedScrollView 中有一个 FrameLayout,如 我在 NestedScrollView 中有一个 FrameLayout,如 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000000"> 但是 FrameLayout 没有填充 NestedScrollView 的高度。我该如何解决这个问题? 检查此解决方案 使用fillViewport="true" 如果需要,此属性会导致滚动视图的子视图扩展到 ScrollView 的高度。当child高于ScrollView时,该属性不起作用。 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior"> 更新 此解决方案也适用于 androidx.coordinatorlayout.widget.CoordinatorLayout 和 androidx.core.widget.NestedScrollView。
Android Lollipop CardView 上的波纹效果
我试图通过在活动 XML 文件中设置 android:backgound 属性来让 CardView 在触摸时显示涟漪效果,如 Android 开发人员页面上所述,但它...
Android Material TextInputLayout 错误消息显示在 Material TextInputEditText 子项后面
我目前正在使用 Material 组件创建 Android UI。 在我的活动中,我使用 com.google.android.material.textfield.TextInputLayout 组件的错误功能。 问题是如果...
我知道应用程序可以通过活动清单中的标签进行全屏 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 是否可以从内部切换到全屏模式.. .
Android XML:“与具有相同 ID 的另一个标签冲突”
我最近从我的项目中删除了一个片段,包括其布局和视图模型。 (FragmentAddFlight、VmAddFlight、fragment_add_flight.xml) 令人惊讶的是我收到这些错误: [数据绑定...
我们在应用程序中显示一些文本(例如在带有 GridLayoutManager 的 RecyclerView 中)。该文本以不同语言显示,如下图突出显示。因此,
我正在开发一个类似家谱的应用程序。我使用力导向布局算法来计算节点将放置的位置。这些节点是我自己创建的自定义视图,称为
如何在recyclerView android中填充项目宽度子项?
嘿我在android 上工作。我想让孩子们适应 recyclerview android 的整个视图。我有水平回收视图。我将在图表中展示我想要的内容。 场景1 当我有更多物品时
如何在 reyclerview android 中填充项目宽度子项
嘿我在android 上工作。我想让孩子们适应 recyclerview android 的整个视图。我有水平回收视图。我将在图表中展示我想要的内容。 场景1 当我有更多物品时
我有 3 个 xml 组件。线性进度、tvQuestionNumber、tvQuestion。 TvQuestion 的部分内容在这里: 我有 3 个 xml 组件。线性进度、tvQuestionNumber、tvQuestion。 TvQuestion 的部分内容在这里: <TextView android:id="@+id/tvQuestion" app:layout_constraintTop_toBottomOf="@id/linearProgress" /> 当 LinearProgress 可见性消失时。我想改变如下: <TextView android:id="@+id/tvQuestion" app:layout_constraintTop_toBottomOf="@id/tvQuestionNumber" /> 我怎样才能让它像那样响应。 将可见性设置为“GONE”后,添加 ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) tvQuestion.getLayoutParams(); layoutParams.topToBottom = R.id.tvQuestionNumber; tvQuestion.setLayoutParams(layoutParams);
Jetpack Compose:如何使用精确的 (x,y) 坐标将 UI 元素定位在其父级中?
根据自定义布局的文档:“每个 UI 元素都有一个父元素,并且可能有多个子元素。每个元素也位于其父元素内,指定为 (x, y) 位置...
我正在开发项目PROJ,它由2个模块com.example.MOD1和com.example.MOD2组成, 在 MOD2 的资源 man_layout.xml 中,我想包含来自 MOD1 的 sub_layout.xml。我愿意: MOD2/res/layout/man_...
ViewBindings 没有为您提供程序化充气器是否存在技术原因?
似乎在每个 Android 版本中,布局充气器都变得越来越慢。在许多情况下,Lollipop 和 Upside Down Cake 之间的速度减慢是 4 倍。人们指出的解决方案是编程......
我有 2 个视图,我需要在下面设置一个屏障,但该屏障无法按预期工作。 这是我的布局。 我有 2 个视图,我需要在下面设置一个屏障,但该屏障无法按预期工作。 这是我的布局。 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/textView15" android:layout_width="0dp" android:layout_height="wrap_content" android:text="This is a text view" app:layout_constraintEnd_toStartOf="@+id/t1" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/t1" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/textView15" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a demo text to check wrap content"/> </com.google.android.material.textfield.TextInputLayout> <androidx.constraintlayout.widget.Barrier android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="bottom" app:constraint_referenced_ids="textView15,t1"/> </androidx.constraintlayout.widget.ConstraintLayout> 黑色虚线是屏障。 这可能是一个错误或者我做错了,预览和实际设备中的结果是相同的 如果您指定 app:layout_optimizationLevel="none" 在ConstraintLayout的XML中,您会发现障碍物将被正确放置。我不确定设置优化级别能达到什么效果,但最近这是一个有障碍的问题。 (ConstraintLayout 版本 2.1.3)。 这是抑制优化之前布局的样子。如前所述,屏障上升到右侧 TextView。 我们通过在 XML 中声明而不进行其他更改来抑制优化: <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_optimizationLevel="none" xmlns:app="http://schemas.android.com/apk/res-auto"> 现在布局如下所示: 障碍物已降至其所属的右侧TextView下方。 这是与 ConstraintLayout 版本 2.1.3 一起使用的。 implementation 'androidx.constraintlayout:constraintlayout:2.1.3' (似乎将优化级别设置为除standard之外的任何值都可以解决此问题。) 添加 app:layout_constrainedHeight="true" 障碍引用的视图解决了我的问题。 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <TextView android:id="@+id/textView15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" android:text="This is a text view" app:layout_constraintEnd_toStartOf="@+id/t1" android:textSize="20sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/t1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/textView15" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a demo text to check wrap content"/> </com.google.android.material.textfield.TextInputLayout> <androidx.constraintlayout.widget.Barrier android:id="@+id/barrier" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="bottom" app:constraint_referenced_ids="textView15,t1"/> <Space android:id="@+id/space" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/barrier" /> </androidx.constraintlayout.widget.ConstraintLayout> 正如之前所写,ConstraintLayout 2.1.3 和 2.1.4 版本无法正常工作,您可以将其降级到 2.0.0。如果没有,您可以使用两种方法。在这两种情况下都删除 <androidx.constraintlayout.widget.Barrier>。 插入LinearLayout以占据所需的视图。例如,如果水平位置有 2 个 TextInputLayout,则可以这样写: <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/upper_view"> <com.google.android.material.textfield.TextInputLayout android:id="@+id/input_layout_1" android:layout_weight="1" ... <com.google.android.material.textfield.TextInputLayout android:id="@+id/input_layout_2" android:layout_weight="1" ... </LinearLayout> 如果您有具有不同视图的复杂布局,请这样写。 <Space android:id="@+id/space" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="@id/input_layout_2" app:layout_constraintTop_toBottomOf="@+id/upper_view" /> 那么你应该在代码中更改 Space 高度。也许您可以将此代码应用于所有TextInputLayout。 // View size change listener private fun View.onSizeChange(callback: () -> Unit) { addOnLayoutChangeListener(object : OnLayoutChangeListener { override fun onLayoutChange( view: View?, left: Int, top: Int, right: Int, bottom: Int, oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int, ) { view?.removeOnLayoutChangeListener(this) if (right - left != oldRight - oldLeft || bottom - top != oldBottom - oldTop) { callback() } } }) } binding.inputLayout2.onSizeChange { // First remove bottom constraint val layoutParams = binding.space.layoutParams as ConstraintLayout.LayoutParams layoutParams.bottomToBottom = ConstraintLayout.LayoutParams.UNSET // Now set height of a <Space> (maximum of two TextInputLayouts) val h1 = binding.inputLayout1.height val h2 = binding.inputLayout2.height binding.inputLayout2.postDelayed({ binding.space.updateLayoutParams { height = max(h1, h2) } }, 1) } 然后将底部视图绑定到 LinearLayout 或 Space 而不是 Barrier。 仅需要 app:layout_optimizationLevel="barrier"。 如果我们使用 app:layout_optimizationLevel="none" 布局渲染可能需要更长的时间,因为每个约束都会被更彻底地重新评估。对于复杂的布局,这可能会导致性能问题。
我应该在 Android Jetpack Compose 中使用 ConstraintLayout 以获得更好的性能吗?
在 Jetpack Compose 之前,ConstraintLayout 是构建复杂布局的推荐方法,因为它允许扁平化 UI 层次结构。请参阅管理复杂性:布局很重要文档部分。 ...
Android PreferenceScreen 位于工具栏顶部
下面是首选项屏幕的屏幕截图: 我还包括布局和 java 代码: 布局/工具栏.xml 下面是首选项屏幕的屏幕截图: 我还包括布局和java代码: 布局/toolbar.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/primary_dark" android:elevation="0dp" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" tools:ignore="UnusedAttribute" /> 布局/activity_settings.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/toolbar" /> </LinearLayout> xml/fragment_settings.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Notifications"> <SwitchPreference android:defaultValue="false" android:key="currencyNotificationOnOff" android:title="@string/notification_enable" /> <com.adwitiya.currencyplus.view.TimePickerDialog android:defaultValue="08:00" android:dependency="currencyNotificationOnOff" android:key="scheduleNotificationTime" android:showDefault="true" android:title="Notification Time" /> </PreferenceCategory> <PreferenceCategory android:title=""> <Preference android:key="about" android:title="@string/about" /> <Preference android:key="disclaimer" android:title="@string/disclaimer" /> <Preference android:key="help" android:title="@string/help" /> </PreferenceCategory> <PreferenceCategory android:title="General"> <Preference android:key="spreadWord" android:title="@string/prefs_spread_word" /> <Preference android:key="rateUs" android:title="@string/rate_us" /> <Preference android:key="feedback" android:title="@string/feedback" /> </PreferenceCategory> </PreferenceScreen> SettingsActivity.java public class SettingsActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()).commit(); TimePickerDialog timePicker = new TimePickerDialog(this); PreferenceManager.setDefaultValues(this, R.xml.fragment_settings, false); } } SettingsFragment.java public class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.fragment_settings); handleSettingsOptions(); } .... } 我无法将工具栏保留在顶部并将首选项屏幕元素保留在其下方。滚动选项时,它会移动到工具栏顶部。 我使用单个首选项屏幕,每个首选项都会打开一个网络视图。 提前感谢您的回复。 希望这对其他人有用,接受的答案对你不起作用。 在 Layout/activity_setting.xml 更改代码,如下所示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/toolbar" /> <!-- added code --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </LinearLayout> 在 SettingsActivity.java 中,替换此代码 getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()).commit(); 有了这个 getFragmentManager().beginTransaction() .replace(R.id.container, new SettingsFragment()).commit(); 解决了这个问题。我所做的更改如下: 从“activity_settings.xml”中删除了工具栏 从“SettingsActivity.java”中删除了工具栏相关代码 在“AndroidManifest.xml”中,我向活动添加了“Theme.AppCompat.Light.DarkActionBar”主题(根据您的要求进行更改)。 以下对我有用: <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/coordinatorLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <include layout="@layout/toolbar" /> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/contentPanel" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 这样您仍然可以使用常规工具栏,并且其主题将保持不变。 将此添加到主要活动 xml... android:fitsSystemWindows="true" 如果您不希望在主活动中出现这种行为,那么我发现的唯一方法是为首选项片段创建自定义工具栏 - Toolbar into PreferenceFragmentCompat。然后将此代码行添加到主题 xml 中的样式中... <item name="android:fitsSystemWindows">true</item>
如何在多语言 Android 应用程序中为 TextInputLayout 显示英文计数器文本
说明: 我使用 TextInputLayout 和 TextInputEditText 来允许用户在我的 Android 应用程序中输入文本。我启用了最大长度为 500 的字符计数器,因此当用户键入时...
我有一个片段,其中包含有条件显示或不显示的LinearLayout。就性能而言,什么是最好的?在 ...
如何在 Kotlin 中将 .xml 文件链接到 .kt 文件
我和我的朋友已经分别编写了应用程序的两个部分,现在正在尝试将其连接在一起。我已将主题编码在 .xml 文档中,而她的代码使用 .kt 文档作为主题。什么...