hBr*_*ent 6 android android-layout
我想在我的应用程序中进行以下布局处理:

正如您所看到的那样,允许文本尽可能宽,而不会将屏幕右侧显示的其他视图从屏幕上移开,根据需要进行椭圆化处理.永远不会有超过3个颜色样本,并且不会少于1个,并且所有样本和圆圈中的x必须始终可见.当文本很短时,它的行为应该与最后两行(蕨类植物)中的行为一样.
我试图将文本和图像放在一个LinearLayout,但是当文本太长时,图像不可见(或不完全可见).我假设有一些方法可以表明图像应该总是占用他们需要的空间,TextView占用剩余部分或尽可能多的需要,但我似乎无法弄清楚如何.我不知道一个RelativeLayout是否会更好地为此工作,或者可能是一个TableLayout/ TableRow或者GridLayout,虽然我读过的任何内容似乎都无法涵盖这种情况.
<?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="match_parent">
<TextView
android:id="@+id/plant_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginRight="3dp"/>
<LinearLayout
android:id="@+id/color_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<LinearLayout
android:id="@+id/color_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<LinearLayout
android:id="@+id/color_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<ImageView
android:id="@+id/remove_plant"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:layout_marginLeft="3dp"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是一个工作布局.发生了两件事.一,行使用LinearLayout带layout_width="wrap_content".这使得它LinearLayout不会扩展到其内容之外,从而使所有内容保持一致(最底层的两个例子).二,TextView正在使用android:layout_weight="1"并android:layout_width="0dp"告诉LinearLayout它应该扩展它TextView以填充剩余的可用空间但不要推出其他视图(前三个例子).注意:这不是全部layout_weight,只是这就是它在此上下文中所做的事情.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:lines="1"
android:text="This is a long line of text and is testing something. This is a long line of text and is testing something. This is a long line of text and is testing something." />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#F00" />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#0F0" />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#00F" />
<Button
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:lines="1"
android:text="This is a long line of text and is testing something. This is a long line of text and is testing something. This is a long line of text and is testing something." />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#F00" />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#0F0" />
<Button
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:lines="1"
android:text="This is some line of text." />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#F00" />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#00F" />
<Button
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ellipsize="end"
android:lines="1"
android:text="This is short" />
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="#F00" />
<Button
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" />
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
此代码为您提供屏幕尺寸(以 dp 和像素为单位)。将图像设置为您喜欢的固定尺寸,例如 30dp 或 Math.min(screenWidth,screenHeight)/100 以相对于显示尺寸进行设置。之后,因为您知道将显示多少图像,所以从总屏幕宽度中减去(图像数量)* imageSize 并将其设置为文本视图宽度
WindowManager wm2 = (WindowManager) con.getSystemService(Context.WINDOW_SERVICE);
Display display = wm2.getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics (); display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
dpHeight = (int) (outMetrics.heightPixels / density);
dpWidth = (int) (outMetrics.widthPixels / density);
screenWidth=outMetrics.widthPixels;
screenHeight=outMetrics.heightPixels;
Run Code Online (Sandbox Code Playgroud)
这是以编程方式设置文本视图宽度的方法
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams)textView.getLayoutParams();
params.width=/calculated size/;
textView.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |