Android 将多个嵌套LineairLayout转换为单个RelativeLayout
首先,一般来说我的UI很差,这就是为什么我需要一些帮助。现在我有以下几点: 用一幅油画解释: 我目前拥有的实际屏幕截图: 与代码,可以在这篇文章的底部找到。这是通过一些嵌套的线性布局和权重完成的 我现在想要的是:Android 将多个嵌套LineairLayout转换为单个RelativeLayout,android,xml,android-layout,android-linearlayout,android-relativelayout,Android,Xml,Android Layout,Android Linearlayout,Android Relativelayout,首先,一般来说我的UI很差,这就是为什么我需要一些帮助。现在我有以下几点: 用一幅油画解释: 我目前拥有的实际屏幕截图: 与代码,可以在这篇文章的底部找到。这是通过一些嵌套的线性布局和权重完成的 我现在想要的是: ImageButton(宽度和高度已知/图像以xml格式设置) TextView(高度已知,宽度应在1和3之间填充) 文本视图(高度已知,宽度(文本)未知) EditText(高度已知,宽度(文本)未知) AutoCompleteTextView(高度已知,宽度应介于4和9之间)
<?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>
在创建时多次调用getView而不是只调用一次,我也遇到了一些问题,但这是有问题的。一旦创建了相对关系,请避免使用不同的线性布局,因为我认为您不需要它们,而是插入视图(textView)直接在这个相对位置内指定它们的绝对位置 这是一个简单的例子:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="752dp"
android:layout_height="336dp"
android:background="@drawable/img_example_panel">
<TextView
android:id="@+id/textView1"
android:layout_width="342dp"
android:layout_height="39dp"
android:layout_marginLeft="261dp"
android:layout_marginTop="21dp"
android:textSize="23sp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginLeft="21dp"
android:layout_marginTop="21dp"
android:background="#0000"/>
<TextView
android:id="@+id/textView3"
android:layout_width="226dp"
android:layout_height="39dp"
android:layout_marginLeft="388dp"
android:layout_marginTop="72dp"
android:textSize="23sp"/>
<TextView
android:id="@+id/textView5"
android:layout_width="243dp"
android:layout_height="37dp"
android:layout_marginLeft="56dp"
android:layout_marginTop="150dp"
android:textSize="22sp"
android:paddingLeft="8dp"
android:gravity="center_vertical"
android:background="#0000"/>
<TextView
android:id="@+id/textView7"
android:layout_width="243dp"
android:layout_height="37dp"
android:layout_marginLeft="423dp"
android:layout_marginTop="150dp"
android:textSize="22sp"/>
当然,位置不是相对于布局的,您必须调整它们;) 我想这就是你所期待的。尝试布局,并根据您的需要进行调整:
<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>
希望能有所帮助。很抱歉响应太晚,我昨天无法整理所有内容来测试您的代码,但现在我已将其合并。结果可以在我的主要帖子的编辑1中找到。除了
android:layout\u leftOf=“@id/leftOf=“@id/leftOf=”
之外,大多数都可以按照我的意愿工作。我的意思是,如果你将一个视图(假设它的宽度为100dp)与marginLeft 50dp放在一起,你必须在下一个视图上设置marginLeft=150dp(50dp+100dp)在第一个元素旁边画,这意味着我必须在代码中画,因为元素之间也有边距。因此,在代码(例如getView方法)中,我应该将这些项的marginLeft添加到image.getMeasureWidth()+(px中的2*myMargin)
?您不必在代码中完成,只需计算它,就可以在XML中完成;)如果我的图像大小在不同的屏幕大小上保持不变,是的,但它们是包装内容。我有,像它的建议与图像,把不同大小的图像在多个可绘制的文件夹根据屏幕大小。无论如何,非常感谢。在一些自定义更改之后,很多都按照我现在想要的方式工作。我唯一的问题是TextView2的大小不正确。它应该在1到3之间填充,但它的大小与1大致相同。我已经尝试了宽度匹配父项
和包装内容
,但宽度没有改变。这是我代码中的tv\u product\u name
。很抱歉反应太晚,我昨天无法整理所有内容来测试您的代码,但现在我已将其合并。结果可以在我的主要帖子的编辑1中找到。除了android:layout_leftOf=“@id/left_ll”,大多数都可以按我的要求工作。多亏了axl_编码器的帮助,我解决了这个问题,现在唯一剩下的就是textView2的大小正确了。它应该在Image1和TextView3之间填充,但看起来它与图像的宽度相同。我尝试了match_parent
和wrap_content
作为宽度,结果相同。在我的代码文本中,View2被命名为tv\u product\u name
。
<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>