我正在尝试并排放置两个TextView,以便两者始终在屏幕上。
他们应该始终保持彼此相邻,触摸边界。但是文本会动态变化,所以即使第一台电视中的文字太长,也不应该将第二台电视机推出屏幕。
这是基本布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/colorAccent"
android:padding="10dp"
android:text="Aa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:padding="10dp"
android:text="Bb" />
</LinearLayout>
这就是它的样子:
但是,如果文本变长,则第二个TextView会被推离屏幕。
我甚至尝试使用RelativeLayout做同样的事情。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<TextView
android:id="@+id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:padding="10dp"
android:text="Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/a"
android:background="@color/colorPrimary"
android:padding="10dp"
android:text="Bb" />
</RelativeLayout>
仍然是同样的问题,第二个TextView不会停留在屏幕上。我想要第一个textView进行椭圆化,或者转换成两行而不将第二个TextView从屏幕上推下来。但我也不希望第二个TextView卡在屏幕右侧(这可以通过给第一个TextView的权重为1来完成)
PS:对我来说,视图的背景并不重要,所以即使我可以通过将视图锁定在屏幕的右侧来管理它,它也完全没问题。 为此,我尝试在 LinearLayout 中的两个视图上使用权重,并在 RelativeLayout 中使用 layout_alignParentRight - 但没有任何成功。编辑:
如果我在两种布局上使用权重 - 这就是它的样子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<TextView
android:id="@+id/a"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:padding="10dp"
android:layout_weight="1"
android:text="Aaa" />
<TextView
android:id="@+id/b"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:padding="10dp"
android:text="Bbfbd" />
</LinearLayout>
如果文本很长,这很好,但是文字很短,就会失败。
解决方案:
我能想到的唯一解决方案是为第一个TextView定义maxWidth属性。此属性在dimens.xml中定义,具有不同屏幕大小的不同值。
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:ellipsize="end"
android:maxLines="1"
android:maxWidth="@dimen/max_text_view_width"
android:padding="10dp"
android:text="Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
<TextView
android:id="@+id/b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:padding="10dp"
android:maxLines="1"
android:text="Bbbbbbb" />
</LinearLayout>
dimens.xml
<resources>
<dimen name="max_text_view_width">300dp</dimen>
</resources>
答案 0 :(得分:3)
TextView
的属性为maxWidth
。你可以设置它 编程
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x; //width of the screen
int height = size.y; // height of the screen
textView1.setMaxWidth(width/2);
textView2.setMaxWidth(width/2); //disable this if you want to have the rest of the screen by second textView
现在,textView最初将具有最小尺寸并将增长到 屏幕的一半大小的最大值。你可以自定义这个 有条件满足你的需求。
答案 1 :(得分:0)
如果textviews是静态的,可以将它们保留在LinearLayout中,并为每个文本视图分配权重= 1。这样他们总会保持不变。
要获得更好,更灵活的解决方案,请使用Google的flexbox layout。这是一个很棒的图书馆,你可以做各种各样的事情。
答案 2 :(得分:0)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal">
<TextView
android:layout_weight="1"
android:id="@+id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:padding="10dp"
android:text="Asssda" />
<TextView
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/a"
android:background="@color/colorPrimary"
android:padding="10dp"
android:text="Bxdadsdc" />
</LinearLayout>
答案 3 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="10dp">
<TextView
android:id="@+id/a"
android:layout_width="0dp"
android:layout_weight=".5"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:padding="10dp"
android:text="wqkdnoqwndowqndowqowndowqndodnwqodnqow" />
<TextView
android:layout_width="0dp"
android:layout_weight=".5"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:padding="10dp"
android:text="Aaaaaaaaainqwdiwdiwdniwqndiwqiwndiwqndiwqdniqwnnwiqdwoqndqowqndolnqwdlnaa\nkpaaaa" />
</LinearLayout>
它不是exaclty解决方案,但你应该使用这种在线性布局中使用权重的方法。
答案 4 :(得分:0)
输入以下代码,问题将解决:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="2"
android:orientation="horizontal"
android:layout_margin="10dp">
<TextView
android:id="@+id/a"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:padding="10dp"
android:scrollbars="vertical"
android:maxLines="2000"
android:text="Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/a"
android:background="@color/colorPrimary"
android:padding="10dp"
android:scrollbars="vertical"
android:layout_alignParentRight="true"
android:text="Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" />
</LinearLayout>
答案 5 :(得分:0)
可行的是为第一个视图设置maxWidth。您可以使用xml资源为多种屏幕尺寸设置maxWidth。
android:maxWidth="@dimen/max_width"
然后你可以在dimens.xml中设置max_width
答案 6 :(得分:0)
给予每个视图相同的权重会使它们占据屏幕的一半。我想这不是你要找的东西。
我认为这里最好的选择是以编程方式计算设备的屏幕宽度,并将第一个textView的最大宽度设置为屏幕宽度的百分比。
答案 7 :(得分:0)
最终对我有用的是为第一个视图设置maxWidth。
我在dimens xml中设置了maxWidth,并覆盖了多个屏幕尺寸的值。很难在多个屏幕上进行测试,但这最终对我有用。
android:maxWidth="@dimen/max_width"