此问题涉及使用屏幕宽度扩展元素,但最多只能达到maxWidth。
我的场景涉及一个垂直导向的LinearLayout
,其中包含固定的行序列。这些行中的每一行都是一个水平的LinearLayout,包含一些由EditText
元素分隔的TextView
个元素。 TextView元素的文本包含一个数学符号(例如+或 - 或/),用于表示第二个框的内容将被添加到第一个框(或从第一个框中减去等),以便在UI的其他位置显示。
EditText
元素必须保持其当前固定宽度,但我希望TextView
元素(像分隔符一样)在宽度上扩展(如果屏幕允许),但最多只能达到maxWidth 30DP。目前,一个示例行的布局如下所示:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="@dimen/row_side_padding"
android:paddingRight="@dimen/row_side_padding"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<EditText
android:id="@+id/editTextBoxOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/box_one_hint"
android:imeOptions="actionDone"
android:inputType="numberSigned"
android:maxLines="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/plus" />
<EditText
android:id="@+id/editTextBoxTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/box_two_hint"
android:imeOptions="actionDone"
android:inputType="numberSigned"
android:maxLines="1" />
</LinearLayout>
此当前代码将TextView的宽度包装为文本的宽度(在此示例中只是一个加号)。这正是我想要的小屏幕!
但是,在更宽的屏幕上,如果TextView变得更宽,可以将元素稍微分开,这将是很好的。我可以通过将其设置为:
来扩展TextView<TextView
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/plus" />
但这会使TextView太大。如果屏幕宽度允许,我希望它扩展到最大30dp。但是from what I understand,android:maxWidth
不能与android:layout_width="match_parent"
一起使用,因此任何maxWidth都会被忽略。
那么如何根据屏幕宽度扩展TextView,但最多只能扩展到最大宽度,同时让我的EditText元素保持相同的大小?
答案 0 :(得分:1)
将android:layout_width
设置为0dip
...这有助于TextView
占用EditTexts
尺寸后可用的空间。
<TextView
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/plus" />
答案 1 :(得分:0)
对于那些正在解决同样问题的人......
似乎没有办法做到这一点。相反,最好的方法是创建一些与某些屏幕宽度相关联的独立布局文件(即res / layout-w600dp以及res / layout本身中的一个以捕获最小的屏幕宽度)。我在layout_plus.xml文件中指定了一个TextView:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity="center"
android:text="@string/plus" >
</TextView>
对于每个这些依赖于屏幕宽度的布局,我使用了不同数量的paddingLeft和paddingRight来手动执行TextView周围的空间扩展。如果需要,可以更改TextView的宽度。
然后在主布局中,删除您尝试展开的TextView并使用 tag。这将允许您自动拖动与屏幕宽度相关的文件 - 无论哪一个是合适的。我的包含看起来像这样:
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/layout_plus"/>
文档说明您应该覆盖layout_width和layout_height属性。
我也希望覆盖其他属性,例如覆盖文本以包含减号而不是加号(允许我更多地重复使用)。不幸的是,include不允许你覆盖其他属性,所以我必须为此创建一组layout_minus.xml布局。
作为使用修改后的布局的替代方法,可以选择简单地创建TextView显示的字符串资源的屏幕宽度相关版本,您可以在其中为较大宽度版本插入空格。这需要更少的更改,可能需要更少的新文件,但字符串中的硬编码空间使得以后调整和调整变得更加困难。