Articles of android layout

替换linearLayout权重机制

背景: 由于性能原因,Google建议避免使用嵌套加权linearLayouts。 使用嵌套加权linearLayout很难读,写和维护。 对于放置可用大小百分比的视图,仍然没有好的选择。 只有解决方案才是权重并使用OpenGL。 甚至没有像WPF / Silverlight上显示的“viewBox”那样自动缩放内容。 这就是为什么我决定创建我自己的布局,你可以告诉它的每个孩子他们的重量(和周围的重量)与它的大小相比应该是什么。 看来我已经成功了,但出于某种原因,我认为有一些我无法追查的错误。 其中一个错误就是textView,即使我为它提供了大量空间,它也会将文本放在顶部而不是中心。 另一方面,imageViews工作得很好。 另一个错误是,如果我在自定义布局中使用布局(例如frameLayout),则其中的视图将不会显示(但布局本身将会显示)。 请帮我弄清楚它为什么会发生。 如何使用:而不是线性布局的下一个用法(我故意使用长XML,以显示我的解决方案如何缩短事物): 我所做的只是(x是将视图本身放在权重列表中的位置): 我的特殊布局代码是: public class WeightedLayout extends ViewGroup { @Override protected WeightedLayout.LayoutParams generateDefaultLayoutParams() { return new WeightedLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); } @Override public WeightedLayout.LayoutParams generateLayoutParams(final AttributeSet attrs) { return new WeightedLayout.LayoutParams(getContext(),attrs); } @Override protected ViewGroup.LayoutParams generateLayoutParams(final android.view.ViewGroup.LayoutParams p) { return new WeightedLayout.LayoutParams(p.width,p.height); } @Override […]

Android:可以在drawable选择器中使用string / enum吗?

问题 Q1 :有没有人设法在xml选择器中使用自定义字符串/枚举属性? 我通过以下[1]得到了一个布尔属性,但不是字符串属性。 编辑:谢谢你的回答。 目前android仅支持布尔选择器。 请参阅接受的答案。 我打算实现一个复杂的自定义按钮,其外观取决于两个variables。 其他将是布尔属性(true或false)和另一个类别属性(具有许多不同的可能值)。 我的计划是使用布尔和字符串(或枚举?)属性。 我希望我可以使用boolean和string属性在xml选择器中定义UI。 Q2 :为什么在[1]中onCreateDrawableState(),布尔属性只有在它们为真时才合并? 这是我测试的,布尔属性有效,字符串没有 注意 :这只是一个测试应用程序,用于确定xml选择器中是否可以使用string / enum属性。 我知道我可以在没有自定义属性的情况下设置按钮的textcolor。 在我的演示应用程序中,我使用布尔属性将按钮背景设置为dark / bright和string属性以设置文本颜色,{“red”,“green”,“blue”}之一。 属性在/res/values/attrs.xml中定义 以下是我想要实现的选择器: @ drawable / custom_button_background(有效) @ color / custom_button_text_color(不起作用) 以下是自定义按钮背景如何连接到布尔选择器,文本颜色连接到字符串选择器。 以下是init()方法中如何加载属性: private void init(AttributeSet attrs) { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MyCustomButton); final int N = a.getIndexCount(); for (int i = 0; i […]

Android Expandable RecyclerView不同的卡高

我有一个包含卡片列表的RecyclerView,每个卡片都会扩展为子卡片。 每张卡片都有不同的文字。 我希望当用户点击子卡时,它会展开以显示内部文本。 扩展高度取决于卡包含的文本量。 我尝试使用以下方法测量目标高度: view.Measure(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 然后将卡扩展到Measured Height(参见此处 )。 但是,它为所有卡提供相同的测量高度。 这是我的代码,它基于此 (更具体地说是Xamarin版本 ): 这是主适配器,它创建并绑定父卡和子卡: public class HalachaExpandableAdapter : ExpandableRecyclerAdapter, View.IOnClickListener { LayoutInflater _inflater; bool expand; int targetHeight; bool wave = false; public HalachaExpandableAdapter(Context context, List itemList) : base(context, itemList) { _inflater = LayoutInflater.From(context); } public override void OnBindChildViewHolder(HalachaChildViewHolder childViewHolder, int position, object childObject) { […]

如何在Android Layout中按值而不是名称设置枚举属性?

我有一个自定义视图持有另一个。 层次: MyOuterView ->MyInnerView MyInnerView有一个枚举属性,如: 所以我可以在MyOuterView XML中实例化组件,如: 当然哪个有效。 MyOuterView为自定义本身提供了一个参数。 根据这个参数,我想设置MyInnerView的参数。 希望的行为是我可以使用数据绑定,如: getMyAttr()如下: public int getMyAttr() { return myAttr; // returns 0 or 1 } 结果是编译问题。 **** /数据绑定错误****消息:在com.example.MyInnerView上找不到参数types为int的属性’app:myAttr’的setter 显然我不能通过值设置枚举,而只能通过名称设置枚举。 除了以编程方式创建MyInnerView之外还有什么想法? 请注意,我无法更改MyInnerView 。

如何在EditText中将光标定位在右侧

我的应用程序使用RTL语言 (从右到左)。 当EditText字段获得焦点时,光标出现在左侧,只有当用户开始键入时,光标(和RTL文本)才会向右移动。 当用户单击“输入”以开始新行时,光标再次向左移动。 当我使用android:gravity=”right” ,光标是OK(在右侧)但是当用户开始输入时,文本总是移动到另一侧(RTL文本向左移动)。 任何想法如何我可以将文本对齐并保持文本方向?

Android UI设计:支持多个屏幕

我已阅读本教程多次支持多个屏幕和许多有关Design Android UIs to fit well with all android screen sizes stackoverflow问题, Design Android UIs to fit well with all android screen sizes 。 但仍然在努力为所有屏幕尺寸提供最佳和相同的用户体验。 当我设计接口时,始终牢记以下图表。 在我的应用程序中,它使用res文件夹下的以下文件夹结构。 此外,我在定义大小时在xml布局文件中使用了dp和sp单位。 小屏幕尺寸 当谈到小屏幕尺寸时,它完美地指代在layout-small和显示下定义的UI而没有任何问题。 正常的屏幕尺寸 当我设计正常屏幕尺寸(layout folder) ,我使用3.5 inches Android设备和3.7 inches模拟器来测试UI在正常屏幕尺寸下的样子。 所以我的布局在这个尺寸上看起来很棒,但是三星Gallaxy S3( 4.8 inches )和S4( 5.0 inches )的屏幕略大,它们仍然指的是普通屏幕尺寸的布局。 因此在那些较大的屏幕中有一个相当大的空间从底部不使用,UI看起来不太好看。 另外在清单文件中,我定义了以下内容, 我对图像密度没有任何问题( drawable-hdpi/drawable-xhdpi/drawable-mdpi/drawable-ldpi ) (1)。 不知道我错过了什么或做错了这样的结果,特别是在Bigger屏幕(4.8英寸)中,以引用正常的布局。 (2)。 另外如果有人可以解释最佳实践和Res文件夹下定义文件夹结构的标准方法,以适应android中的所有屏幕尺寸,将不胜感激,因为这是如此令人困惑。 谢谢。

Android:将TabLayout固定到Scrollview的顶部

我正在看手机上的推特应用程序。 您可以看到,当用户向上滚动时,tabLayout实际上只是很好地将自己固定在工具栏的底部并且根本不移动。 我想也许他们通过将应用程序的所有顶部(配置文件图片,自行车的配置文件壁纸,草地,文本)放入CollapsingToolBarLayout和AppBarLayout,但实际上只有配置文件壁纸草地上的自行车是CollapsingToolBarLayout和AppBarLayout的一部分,因为这是实际崩溃的唯一部分。 文本部分向上滚动,tabLayout只是在工具栏下方的顶部。 我在twitter应用程序上阅读了这些信用点,看起来他们使用SlidingTabLayout来实现它们的效果。 SlidingTabLayout类似于tabLayout,后者在支持库中受支持。 它看起来像现在主流应用程序使用的相当常见的模式 – Google+应用在应用的个人资料视图中使用它: Facebook Moments在他们的应用中使用它: 知道他们是怎么做的都设法做到了吗? 我正在寻找类似于所有这些应用程序的东西。 我的要求是: 滚动时有一个collapsingToolBarLayout崩溃 在collapsingToolBarLayout下面有一个textview,当它完全折叠时会在toolBar下面滚动和“隐藏”。 当你在collapsingToolBarLayout下滚动textview时,在textview下面有一个tabLayout,它会“粘住”tabLayout。 在tabLayout下面有一个recyclerview,这样当你点击tabLayout中的每个标签时,recyclerview将在“推文”,“照片”,“collections夹”等列表之间切换。 我查看了SO上发布的另外两个问题: TabLayout的标签选择指示器在滚动时是否可以固定在屏幕顶部? 。 这里的答案似乎是改变tabLayout的行为,但我怀疑改变行为实际上会生成twitter应用程序的function。 正如我所提到的,tabLayout似乎位于CollapsingToolBarLayout和AppBarLayout之外,只有当它位于CollapsingToolBarLayout和AppBarLayout中时,行为才有效。 如何在ScrollView顶部固定TabLaout? 。 这个问题与我提出的问题类似,但没有提供足够的细节,也没有答案。

检测TextView是否跨越2行

我想知道是否有任何方法可以检测到文本视图中的字符串是否到达屏幕的末尾并因此更改行,或者如果textview跨越2行? 我想知道这一点,所以如果textview跨越2行,我可以增加一些textviews之间的边距,当然我想动态地这样做。

在app:layout_behavior之后,Android NestedScrollView的大小错误

由于Google已经发布了针对android的设计支持库,因此可以在不实现自定义代码的情况下完成许多好事。 虽然我在这个lib中测试了自定义视图,但我发现了更糟糕的事情,我不知道这是不是一个bug。 我在github上find了cheesesquare项目。 在activity_detail.xml(布局文件)中 ,NestedScrollView中有3个CardView。 如果删除其中的2个,则可以看到NestedScrollView没有父级的完整大小(match_parent)。 NestedScrollView绑定到父视图的底部。 http://img.androidcookie.com/android/BXl7w.png 当我删除app:layout_behavior=”@string/appbar_scrolling_view_behavior”时,NestedScrollView得到的是他的完整大小app:layout_behavior=”@string/appbar_scrolling_view_behavior” 。 但是当我删除布局行为时,工具栏不会折叠。 这有什么问题吗? 示例布局文件可以在这里find: https : //github.com/Smove/cheesesquare/blob/stackoverflow/app/src/main/res/layout/activity_detail.xml 你可以从我的github分支stackoverflow构建cheesesquare apk

Google Nexus 7和10的布局文件夹

我正在为谷歌nexus 7和10开发一个应用程序。但是有一个问题。 我不知道哪个布局文件夹应该用于7和10。