扩展TextView,屏幕大小最大为maxWidth

时间:2014-03-07 11:29:33

标签: android android-layout textview

此问题涉及使用屏幕宽度扩展元素,但最多只能达到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 understandandroid:maxWidth不能与android:layout_width="match_parent"一起使用,因此任何maxWidth都会被忽略。

那么如何根据屏幕宽度扩展TextView,但最多只能扩展到最大宽度,同时让我的EditText元素保持相同的大小?

2 个答案:

答案 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显示的字符串资源的屏幕宽度相关版本,您可以在其中为较大宽度版本插入空格。这需要更少的更改,可能需要更少的新文件,但字符串中的硬编码空间使得以后调整和调整变得更加困难。