android-将多个嵌套的LineairLayouts转换为单个RelativeLayout
作者:互联网
首先,总体而言,我对UI非常不满意,这就是为什么我需要一些帮助.现在,我有以下内容:
用画图解释:
我目前拥有的实际屏幕截图:
使用可以在本文底部找到的代码.这是通过一些嵌套的LineairLayouts和权重完成的.
我现在想要的是以下内容:
> ImageButton(宽度和高度已知/图像在xml中设置)
> TextView(已知高度,宽度应在1到3之间)
> TextView(高度已知,宽度(文本)未知)
> EditText(高度已知,宽度(文本)未知)
> AutoCompleteTextView(已知高度,宽度应在4到9之间)
> TextView(已知宽度和高度/在xml中设置了文本)
>微调器(高度已知,宽度应在6到8之间)
> ImageButton(宽度和高度已知/图像在xml中设置)这是我现在要添加的一个.
>空间(宽度和高度均在代码中确定以填充空白空间)
我知道我可能能够弄清楚如何使用另一个嵌套的LineairLayout和嵌套的权重添加此ImageButton,但是由于我的应用程序的性能还不够好,并且我目前正在尝试解决许多性能问题,我认为最好将此list_item.xml转换为单个RelativeLayout.
那么,我该怎么做呢?我只是很讨厌UI的放置,因此我将不胜感激.如何使用第二个Paint-image的结果创建RelativeLayout?
当前代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<!-- The DOCTYPE above is added to get rid of the following warning:
"No grammar constraints (DTD or XML schema) detected for the document." -->
<!-- The View for a single CheckListItem -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<!-- The TextViews -->
<LinearLayout
android:id="@+id/ll1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin"
android:adjustViewBounds="true"
android:background="@layout/transparent_background"
android:contentDescription="@string/checkbox_content_description"
android:src="@drawable/checkbox_unchecked" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/default_margin"
android:layout_marginTop="@dimen/default_margin"
android:layout_weight="1"
android:gravity="center_vertical" >
<TextView
android:id="@+id/tv_product_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true" />
</LinearLayout>
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/default_margin"
android:layout_marginTop="@dimen/default_margin" />
</LinearLayout>
<!-- The EditTexts -->
<LinearLayout
android:id="@+id/ll2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ll1"
android:gravity="center"
android:orientation="horizontal"
android:visibility="visible" >
<Space
android:id="@+id/filler_space_image"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin"
android:orientation="vertical"
android:padding="0dp">
<EditText
android:id="@+id/et_result_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number" />
<TextView
android:id="@+id/tv_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tags"
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin"
android:layout_weight="1"
android:gravity="center_vertical"
android:padding="0dp"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/actv_result_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ellipsize="end"
android:inputType="text"
android:singleLine="true" />
<Spinner
android:id="@+id/sp_tags"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<!--<ImageButton
android:id="@+id/btn_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@android:drawable/ic_menu_manage"
android:contentDescription="@string/button_tags_content_description"
android:background="@layout/transparent_background" />-->
</LinearLayout>
<Space
android:id="@+id/filler_space_price"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin" />
</LinearLayout>
</RelativeLayout>
编辑1:
在我尝试了@AlexBalo suggestion之后,它就接近工作了.它只在android:layout_leftOf =“ @ id / left_ll”遇到麻烦.
PS:我的商品有两种不同的状态:一种未选中/绿色选中/红色叉形,仅显示视图1、2和3.另一种橘黄色的选中状态,如所提供的图片.
到目前为止,这是AlexBalo所做更改的结果:
状态未选中/绿色选中/红叉:
状态橙黄色检查:
使用以下代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<!-- The DOCTYPE above is added to get rid of the following warning:
"No grammar constraints (DTD or XML schema) detected for the document." -->
<!-- The View for a single CheckListItem -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/left_ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@layout/transparent_background"
android:contentDescription="@string/checkbox_content_description"
android:src="@drawable/checkbox_unchecked"
android:layout_marginTop="@dimen/default_margin"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
<Space
android:id="@+id/filler_space_image"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
</LinearLayout>
<TextView
android:id="@+id/tv_product_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/left_ll"
android:layout_toLeftOf="@+id/right_ll"
android:ellipsize="end"
android:singleLine="true"
android:layout_marginTop="@dimen/default_margin"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
<EditText
android:id="@+id/et_result_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_product_name"
android:layout_toRightOf="@id/left_ll"
android:inputType="number"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
<AutoCompleteTextView
android:id="@+id/actv_result_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/right_ll"
android:layout_toRightOf="@id/et_result_amount"
android:layout_below="@+id/tv_product_name"
android:ellipsize="end"
android:inputType="text"
android:singleLine="true" />
<TextView
android:id="@+id/tv_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_result_amount"
android:layout_toRightOf="@id/left_ll"
android:text="@string/tags"
android:gravity="center"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
<Spinner
android:id="@+id/sp_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/actv_result_name"
android:layout_toRightOf="@id/tv_tags"
android:layout_toLeftOf="@id/right_ll"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin" />
<LinearLayout
android:id="@id/right_ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/default_margin" />
<Space
android:id="@+id/filler_space_price"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin" />
<ImageButton
android:id="@+id/btn_tags"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@android:drawable/ic_menu_manage"
android:contentDescription="@string/button_tags_content_description"
android:background="@layout/transparent_background"
android:layout_marginLeft="@dimen/default_margin"
android:layout_marginBottom="@dimen/default_margin"
android:layout_marginRight="@dimen/default_margin" />
</LinearLayout>
</RelativeLayout>
我也遇到了很多问题,因为多次调用getView而不是在创建时仅调用一次,但这对于another question来说是这样.
解决方法:
这就是我所期望的.尝试布局并根据您的需求进行调整:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Left side -->
<LinearLayout
android:id="@+id/leftContainer"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/image1"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@android:color/white" />
<View
android:id="@+id/space9left"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_below="@+id/image1" />
</LinearLayout>
<TextView
android:id="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_toLeftOf="@+id/rightContainer"
android:layout_toRightOf="@+id/leftContainer"
android:text="Textview2" />
<EditText
android:id="@+id/edittext4"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/textview2"
android:layout_toRightOf="@+id/leftContainer"
android:text="Edittext4" />
<TextView
android:id="@+id/autocompleteTextview5"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_toLeftOf="@+id/rightContainer"
android:layout_toRightOf="@+id/edittext4"
android:layout_below="@+id/textview2"
android:text="autocompleteTextview5" />
<TextView
android:id="@+id/textview6"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/edittext4"
android:layout_toRightOf="@+id/leftContainer"
android:text="Textview6" />
<TextView
android:id="@+id/spinner7"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/autocompleteTextview5"
android:layout_toRightOf="@+id/textview6"
android:layout_toLeftOf="@+id/rightContainer"
android:text="Spinner7" />
<!-- Right side -->
<LinearLayout
android:id="@+id/rightContainer"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:orientation="vertical" >
<TextView
android:id="@+id/textview3"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="Textview3" />
<View
android:id="@+id/space9right"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@+id/image1" />
<ImageView
android:id="@+id/image8"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@android:color/white" />
</LinearLayout>
</RelativeLayout>
希望能帮助到你.
标签:android-layout,android-linearlayout,relativelayout,xml,android 来源: https://codeday.me/bug/20191121/2052027.html