android-layout 相关问题

布局定义用户界面的可视结构,例如活动,片段或应用程序窗口小部件的UI。

android - 按钮未垂直居中

运行此命令后,它显示在顶部而不是中心。但在 xml 预览中它是居中的。 运行此命令后,它会显示在顶部而不是中心。但在 xml 预览中它是居中的。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center_vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/_1" android:textSize="25sp" android:layout_gravity="center" /> <Button android:id="@+id/roll_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/roll" android:layout_gravity="center" /> </LinearLayout> 发生了什么变化,它运行良好,但添加 Toast 后,它开始发生 IG。 用这个 android:layout_gravity="center_vertical|center_horizontal" 或将其用于中心垂直 android:layout_gravity="center_vertical"

回答 1 投票 0

第一个活动需要很长时间才能显示

我的应用程序中有一个非常简单的第一个活动,这是一个“启动”活动。它仅显示图像,并在一个小动画之后启动我的应用程序的主菜单活动。 问题是我...

回答 1 投票 0

Android - Activity Home/向上箭头在 SDK 24 中具有额外的填充/边距

我刚刚将我的应用程序从使用 SDK 23 更新为 SDK 24。 我的活动出现了问题,显示了向上/主页箭头(即 getSupportActionBar().setDisplayHomeAsUpEnabled(true))...

回答 4 投票 0


我在将数据提取到外部库的布局时看到连续错误

我正在为 Tinder 构建一个克隆 Android 应用程序。我目前正在关注 youtube 上的教程,他使用了 github 上的 cardstackview,甚至我也这样做了,并遵循了每一个步骤,但是......

回答 1 投票 0

Android中如何将图标垂直对齐到textview第一行的中心

我想放置左侧图标(请参阅下图),垂直居中于 TextView 中文本的第一行。我找不到方法,我在文本视图、重力和约束上尝试了drawableLeft...

回答 2 投票 0

ConstraintLayout 不展开

所以这有点难以描述,请耐心等待。 我有一个带有 ScrollView 和 ConstraintLayout 的片段。 这个想法是该片段应该充满调查,所以......

回答 1 投票 0

无法设置 ConstraintLayout.Group 中单个项目的可见性

我有一个 ConstraintLayout.Group 定义如下: 我有一个 ConstraintLayout.Group 定义如下: <android.support.constraint.Group android:id="@+id/someGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" app:constraint_referenced_ids=" textView1, textView2, button1" /> 我将此组的可见性从“消失”更改为“可见”: someGroup.visibility = VISIBLE 但是当我尝试通过指定该组中视图之一的可见性来覆盖它时: button1.visibility = GONE ...这不起作用。我将此可见性记录到 logcat,它显示 8 (GONE),但我仍然可以看到视图。 你知道这里可能发生什么吗?我尝试在这个群组中拨打requestLayout和updatePreLayout,我尝试更改可见性几次,可见,不可见,然后消失。我什至重建了整个项目,因为一些 stackoverflow 答案说它可能有助于解决 ConstraintLayout 中的可见性问题。我还尝试了版本 1.1.3 和 2.2.0-alpha。什么都没起作用。它总是可见的。 更新: 组内单个视图可见性的行为已更改,并报告在 ConstraintLayout 版本 2.0.0 beta 6 中已修复。请参阅 ConstraintLayout 2.0.0 beta 6 的错误修复。 您看到的是正确的行为。当您将视图放置在组中时,您就放弃了更改单个视图的可见性的能力。我认为机制是视图的可见性由您设置,然后组的可见性根据组成员身份分配(由系统)。 解决方法取决于您的需求: 将您想要控制其可见性的视图保留在组之外; 管理自己的群组逻辑,忘记系统提供的群组; 使用 setReferencedIds 管理组成员资格。 我认为这是一个常见的抱怨,但我也认为它不太可能得到解决。 (恕我直言) 我刚刚评论了关于这个确切问题的另一个问题,所以我冒昧地在这里发布(尽管答案已经被接受)一个简单的类,它将帮助管理一个ConstraintLayout组。 ManagedGroup.java /** * Manage a ConstraintLayout Group view membership as a view's visibility is changed. Calling * {@link #setVisibility(View, int)} will set a view's visibility and remove it from the group. * Other methods here provide explicit means to manage a group's view membership. * <p> * Usage: In XML define * <pre>{@code * <[Package].ManagedGroup * android:id="@+id/group" * android:layout_width="wrap_content" * android:layout_height="wrap_content" * android:visibility="visible" * app:constraint_referenced_ids="id1,id2,id3..." />} * </pre> */ public class ManagedGroup extends Group { private final Set<Integer> mRemovedRefIds = new HashSet<>(); public ManagedGroup(Context context) { super(context); } public ManagedGroup(Context context, AttributeSet attrs) { super(context, attrs); } public ManagedGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * Set the reference ids for the group and clear the removed id array. * * @param ids All identifiers in the group. */ @Override public void setReferencedIds(@NonNull int[] ids) { super.setReferencedIds(ids); mRemovedRefIds.clear(); } /** * Set visibility for view and remove the view's id from the group. * * @param view View for visibility change * @param visibility View.VISIBLE, View.INVISIBLE or View.GONE. */ public void setVisibility(@NonNull View view, int visibility) { removeReferencedIds(view.getId()); view.setVisibility(visibility); } /** * Add all removed views back into the group. */ public void resetGroup() { setReferencedIds(getAllReferencedIds()); } /** * Remove reference ids from the group. This is done automatically when * setVisibility(View view, int visibility) is called. * * @param idsToRemove All the ids to remove from the group. */ public void removeReferencedIds(int... idsToRemove) { for (int id : idsToRemove) { mRemovedRefIds.add(id); } int[] refIds = getReferencedIds(); Set<Integer> newRefIdSet = new HashSet<>(); for (int id : refIds) { if (!mRemovedRefIds.contains(id)) { newRefIdSet.add(id); } } super.setReferencedIds(copySetToIntArray(newRefIdSet)); } /** * Add reference ids to the group. * * @param idsToAdd Identifiers to add to the group. */ public void addReferencedIds(int... idsToAdd) { for (int id : idsToAdd) { mRemovedRefIds.remove(id); } super.setReferencedIds(joinArrays(getReferencedIds(), idsToAdd)); } /** * Return int[] of all ids in the group plus those removed. * * @return All current ids in group plus those removed. */ @NonNull public int[] getAllReferencedIds() { return joinArrays(getReferencedIds(), copySetToIntArray(mRemovedRefIds)); } @NonNull private int[] copySetToIntArray(Set<Integer> fromSet) { int[] toArray = new int[fromSet.size()]; int i = 0; for (int id : fromSet) { toArray[i++] = id; } return toArray; } @NonNull private int[] joinArrays(@NonNull int[] array1, @NonNull int[] array2) { int[] joinedArray = new int[array1.length + array2.length]; System.arraycopy(array1, 0, joinedArray, 0, array1.length); System.arraycopy(array2, 0, joinedArray, array1.length, array2.length); return joinedArray; } } 不幸的是,这才是它应该发挥的作用。如果该视图已呈现在一组 ConstraintLayout 中,您将无法更改该视图的可见性 您可以在此处查看该问题跟踪器的讨论: https://issuetracker.google.com/issues/73186245

回答 2 投票 0

将可组合项置于屏幕中央

我有一个简单的加载可组合项: @可组合 有趣的加载(){ 循环进度指示器() } 我希望它位于屏幕中央。我搜索了文档并找到了

回答 1 投票 0

如何创建自定义布局并将图像上的引用发送到我的自定义布局类?

我想创建这样的自定义布局: 图像箭头始终保持不变并且不会改变。但我希望图像电子邮件会发生变化,具体取决于我想发送到那里的图像,就像我一样

回答 1 投票 0

MaterialButtonToggleGroup 中的 MaterialButton 无法执行wrap_content

我有以下xml: 我有以下 xml: <LinearLayout android:id="@+id/ll_two_state" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginStart="10dp" android:layout_marginEnd="10dp" app:cardCornerRadius="5dp" app:strokeWidth="1dp"> <com.google.android.material.button.MaterialButton android:id="@+id/filterA" style="@style/customToggleButtonStyle" app:cornerRadius="0dp" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="läkdsvksd" android:textSelectHandleLeft="@drawable/rounded_corner" android:ellipsize="none"/> <com.google.android.material.button.MaterialButton android:id="@+id/filterB" style="@style/customToggleButtonStyle" app:cornerRadius="0dp" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:ellipsize="none" android:textSelectHandleRight="@drawable/rounded_corner" android:text="öskdjnvksjnbvsnfjknvlsnd fvlnsdkjnvsdklövölkjvndfökljnvljkdfnlvjknlvjkn" /> </LinearLayout> 它为我提供了两个高度相等的按钮作为切换按钮。 问题是,无论添加 maxLine、line 或 minLine 标签,使用 MaterialButtonToggleGroup 强制按钮到一行都无法获得相同的结果。 使用 MaterialButtonToggleGroup 的原因是在处理更改并获得圆角时代码更清晰。 有解决办法吗?还是我应该使用不同类型的视图? 我终于得到了我所期望的。 这个问题有两个bug: 按钮未包装其内容 MaterialButtonToggleGroup 覆盖 maxLine 因此我对 LinearLayout 的修复可以用于 MaterialButtonToggleGroup,如下所示: <com.google.android.material.button.MaterialButtonToggleGroup android:id="@+id/toggle_group" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:layout_marginEnd="10dp" android:gravity="center" app:cardCornerRadius="5dp" app:selectionRequired="true" app:singleSelection="true" app:strokeWidth="1dp"> <com.google.android.material.button.MaterialButton android:id="@+id/filterA" style="@style/customToggleButtonStyle" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="State A" /> <com.google.android.material.button.MaterialButton android:id="@+id/filterB" style="@style/customToggleButtonStyle" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="State B" /> </com.google.android.material.button.MaterialButtonToggleGroup> 并将以下几行添加到我的代码中: binding.filterA.maxLines = 2 binding.filterB.maxLines = 2 现在看起来像这样:

回答 1 投票 0

Android 横向视频视图位于中心

我正在开发Android应用程序。我需要以横向模式播放视频,视频视图应该位于屏幕中央,但它正在屏幕的左角播放视频。这是我的代码, <

回答 1 投票 0

在 Android 中渲染布局以显示缺口

我尝试添加layoutInDisplayCutoutMode ShortEdges,但没有任何影响。我需要将布局拉伸到顶部,类似于 Netflix android 应用程序中显示的图像

回答 2 投票 0

删除约束布局中 2 个文本视图之间的间隙

我有以下简单的布局 我有以下简单布局 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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/favouriteStore" android:layout_width="@dimen/favourite_store_card_width" android:layout_height="@dimen/favourite_store_card_height"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:id="@+id/layoutContent" android:layout_height="match_parent" android:background="@drawable/background_with_gradiant2" android:translationZ="10dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.imageview.ShapeableImageView android:id="@+id/imageViewStoreLogo" android:layout_width="@dimen/margin_60dp" android:layout_height="@dimen/margin_60dp" android:layout_marginEnd="@dimen/margin_16dp" android:layout_marginBottom="@dimen/margin_16dp" android:visibility="visible" android:scaleType="fitXY" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:shapeAppearanceOverlay="@style/roundedImageView" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/textViewStoreTitle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/margin_20dp" android:textColor="@color/white" android:textSize="@dimen/text_medium" app:lineHeight="19.2dp" android:lineSpacingExtra="-2sp" android:lines="1" android:ellipsize="end" android:includeFontPadding="false" app:fontFamily="@font/graphikthai_semibold_app" app:layout_constraintVertical_bias="0" app:layout_constraintBottom_toTopOf="@id/textViewStoreSubTitle" app:layout_constraintEnd_toStartOf="@+id/imageViewStoreLogo" app:layout_constraintStart_toStartOf="@+id/textViewStoreSubTitle" android:layout_marginBottom="@dimen/margin_5dp" tools:text="Robinson" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/textViewStoreSubTitle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/margin_16dp" android:layout_marginEnd="@dimen/margin_20dp" android:layout_marginBottom="16dp" android:ellipsize="end" android:includeFontPadding="false" android:letterSpacing="0" android:lineSpacingExtra="3sp" android:lines="1" android:textColor="@color/white" android:textSize="@dimen/sp13" app:fontFamily="@font/cpn_regular" app:layout_constraintVertical_bias="0" app:layout_constraintEnd_toStartOf="@+id/imageViewStoreLogo" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:lineHeight="16dp" tools:text="Bringing you the best" /> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/imageViewStore" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:focusable="true" android:scaleType="fitXY" android:transitionGroup="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/bg_banner_image_placeholder" /> </androidx.constraintlayout.widget.ConstraintLayout> 看起来像这样,绿线有一个 5dp 的间隙,我想删除: 但是,我想消除两个文本视图之间的间隙。 绿色框有一个 5dp 的间隙,我想删除它。这是从哪里来的? 在你的AppCompatTextView textViewStoreTitle中,删除layout_marginBottom,你应该没问题。 android:layout_marginBottom="@dimen/margin_5dp"

回答 1 投票 0

Android:以编程方式从 Java 代码填充微调器

如何通过 Java 代码以编程方式填充微调器? 我的布局中有一个微调器,如下所示: 如何通过 Java 代码以编程方式填充微调器? 我的布局中有一个旋转器,如下所示: <Spinner android:id="@+id/consultation_deseases" android:layout_width="@dimen/bigSpinnerWidth" android:layout_height="@dimen/bigSpinnerHeight" android:prompt="@string/disease_prompt" /> 使用 java 代码,我需要创建适配器并添加项目。 // you need to have a list of data that you want the spinner to display List<String> spinnerArray = new ArrayList<String>(); spinnerArray.add("item1"); spinnerArray.add("item2"); ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item, spinnerArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner sItems = (Spinner) findViewById(R.id.spinner1); sItems.setAdapter(adapter); 还要找出选择了什么,你可以这样做 String selected = sItems.getSelectedItem().toString(); if (selected.equals("what ever the option was")) { } 这是一个完全编程的示例: 初始化一个 Spinner。 通过字符串列表填充数据。 调整微调器的大小并将其添加到我的视图中。 设置 Spinner 字体的格式(字体大小、颜色、填充)。 清除微调器。 向微调器添加新值。 重画微调器。 我正在使用以下类变量: Spinner varSpinner; List<String> varSpinnerData; float varScaleX; float varScaleY; A - 初始化并渲染 Spinner(varRoot 是指向我的主要 Activity 的指针): public void renderSpinner() { List<String> myArraySpinner = new ArrayList<String>(); myArraySpinner.add("red"); myArraySpinner.add("green"); myArraySpinner.add("blue"); varSpinnerData = myArraySpinner; Spinner mySpinner = new Spinner(varRoot); varSpinner = mySpinner; ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, myArraySpinner); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww mySpinner.setAdapter(spinnerArrayAdapter); B - 调整大小并将微调器添加到我的视图中: FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); myParamsLayout.gravity = Gravity.NO_GRAVITY; myParamsLayout.leftMargin = (int) (100 * varScaleX); myParamsLayout.topMargin = (int) (350 * varScaleY); myParamsLayout.width = (int) (300 * varScaleX);; myParamsLayout.height = (int) (60 * varScaleY);; varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout); C - 创建 Click 处理程序并使用它来设置字体。 mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int myPosition, long myID) { Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID); ((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN); ((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f) ); ((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1); } @Override public void onNothingSelected(AdapterView<?> parentView) { // your code here } }); } D - 使用新数据更新微调器: private void updateInitSpinners(){ String mySelected = varSpinner.getSelectedItem().toString(); Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); varSpinnerData.clear(); varSpinnerData.add("Hello World"); varSpinnerData.add("Hello World 2"); ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); varSpinner.invalidate(); varSpinner.setSelection(1); } } 我在 updateInitSpinners 中无法解决的问题是执行 varSpinner.setSelection(0);并自动激活自定义字体设置。 更新: 这个“丑陋”的解决方案解决了 varSpinner.setSelection(0);问题,但我对此不太满意: private void updateInitSpinners(){ String mySelected = varSpinner.getSelectedItem().toString(); Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); varSpinnerData.clear(); ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, varSpinnerData); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); varSpinner.setAdapter(spinnerArrayAdapter); varSpinnerData.add("Hello World"); varSpinnerData.add("Hello World 2"); ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); varSpinner.invalidate(); varSpinner.setSelection(0); } } 希望这有帮助...... 我将关注公共时期的数字经济事宜。公共部门定期享受国家自主权保障。这包括在互联网上的主要研究、观点和声誉,以及在网络上的渐进位置,以促进公共事业的初步结果。我们以预先准备的格式编辑了相关新闻,以期为该领域的利益相关者提供一些建议。如果我确认了电话,则可以通过明确的方式联系该过程中的功能。谢谢

回答 3 投票 0

Android 按方向约束布局

我正在尝试构建一个具有 2 个视图的约束布局的布局。在纵向视图中,我希望视图垂直堆叠,在横向视图中,我希望视图相邻......

回答 1 投票 0

Android BottomSheetDialogFragment 状态变化监听器

我正在使用 BottomSheetDialogFragment,我需要知道状态何时发生变化。 例如有BottomSheetBehavior的状态 PEEK_HEIGHT_AUTO - 查看其父级的 16:9 比例键线。 ...

回答 2 投票 0

如何知道jetpack compose中惰性行的视图端口中完全可见的项目?

我有一个包含项目的惰性行。现在,我想对每当用户滚动惰性行时在视口中完全可见的项目进行 API 调用。 我尝试过以下代码: ...

回答 3 投票 0

显示键盘时向上移动 FrameLayout

我看到了类似的主题,但我在那里看到的解决方案对我不起作用。 所以我有主要的 ConstraintLayout 和一些 editText。在该约束的底部,我有带有 2 个按钮的 FrameLayout。问题是...

回答 1 投票 0

将带有约束布局的子可组合函数添加到jetpack compose中的父约束布局中

我计划为我的应用程序使用约束布局。我想将具有约束布局的子可组合项包含到父可组合项中。当我尝试像正常的包含方式一样时,它不起作用,我

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.