我的Android应用程序中有一个表单由一个垂直定向的父LinearLayout组成,其中有一堆水平定向的子项。孩子们有一个标签(TextView),然后是EditText。包装每个表单行的LinearLayout设置为具有match_parent的宽度,因此它填充屏幕的宽度。包含标签和编辑文本的内部表单行布局的大小为30%标签,70%为文本字段。我有一个字段,虽然有一个标签(textview),编辑文本,然后在同一行上的另一个文本视图。我希望标签保持30%的空间,使该行末尾的最后一个文本视图得到修复,并使用edittext来获取剩余的空间。这是代码示例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout style="@style/FormRow">
<TextView
android:id="@+id/Username"
style="@style/FormRowLabel"
android:text="@string/username_hint"
/>
<EditText
android:id="@+id/UsernameValue"
style="@style/FormRowEditText"
android:inputType="textEmailAddress"
/>
</LinearLayout>
.....
<LinearLayout style="@style/FormRow">
<TextView
android:id="@+id/AnotherField"
style="@style/FormRowLabel"
android:text="@string/fieldname"
/>
<EditText
android:id="@+id/AnotherFieldValue"
style="@style/FormRowEditText"
android:width="?"
/>
<TextView layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sometext"
/>
</LinearLayout>
</LinearLayout>
我的风格如下:
<style name="FormRow">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:orientation">horizontal</item>
<item name="android:paddingTop">6dp</item>
<item name="android:paddingBottom">6dp</item>
<item name="android:paddingLeft">6dp</item>
<item name="android:paddingRight">6dp</item>
<item name="android:weightSum">10</item>
</style>
<style name="FormRowLabel">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_marginLeft">2dp</item>
<item name="android:layout_weight">3</item>
<item name="android:singleLine">false</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
<style name="FormRowEditText" parent="EditText">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">7</item>
</style>
我已经玩过所有3的权重,但在横向方向上,我最终得到了一堆用于文本视图的腰部空间,可以用于编辑文本。有没有办法用布局权重做这个?或者我怎么能这样做?我不是相对布局的忠实粉丝所以我更喜欢将这些内部布局保留为LinearLayouts。
答案 0 :(得分:1)
我理解你遇到的问题,为了达到你想要的效果,你必须改变你构建它的方式。
让我们创建两列,而不是行。第一列将包含所有标签,第二列将包含EditText
个视图,偶尔会显示EditText
+ TextView
。
示例:强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="0dp"
android:layout_weight="3"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_weight="7"
android:orientation="vertical" >
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
如果您有任何问题,请告诉我们!
答案 1 :(得分:0)
是的可能。我是这样做的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="30dp"
android:id="@+id/abcd"
android:clickable="true"
android:elevation="10dp"
android:focusable="false"
android:background="@drawable/selection_on_higlight"
>
<TextView
android:id="@+id/efg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Name"
android:textSize="15sp"
android:layout_alignParentTop="true"
android:textAppearance="?attr/textAppearanceListItem"
android:layout_weight="0.8"
android:layout_gravity="center"
android:nestedScrollingEnabled="true"
android:singleLine="false"
android:ellipsize="none"
android:selectAllOnFocus="true" />
<TextView
android:id="@+id/hij"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceListItem"
android:text="x 99"
android:layout_toEndOf="@+id/cartItemName"
android:textSize="15sp"
android:layout_alignParentTop="true"
android:layout_weight="1.2"
android:layout_gravity="center"
android:nestedScrollingEnabled="true" />
<ImageView
android:layout_width="fill_parent"
android:layout_height="25dp"
android:layout_alignParentTop="true"
android:id="@+id/lmn"
android:layout_toLeftOf="@+id/cartItemSubtotal"
android:src="@drawable/broccoli"
android:layout_toEndOf="@+id/cartItemQty"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:nestedScrollingEnabled="false"
android:adjustViewBounds="false" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/xyz"
android:text="abcd"
android:textSize="15sp"
android:textAppearance="?attr/textAppearanceListItem"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:gravity="center_vertical|center_horizontal|right"
android:layout_gravity="center"
android:nestedScrollingEnabled="false"
android:layout_weight="1.1"
android:textStyle="bold" />
</LinearLayout>
只需将width属性设置为匹配父级,并相应地指定权重