Java 在Android中居中放置两个视图块

Java 在Android中居中放置两个视图块,java,android,xml,Java,Android,Xml,我希望两个标签块在屏幕上水平居中,目前我有以下代码: <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/Text

我希望两个标签块在屏幕上水平居中,目前我有以下代码:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Lorem ipsum"
        android:textColor="#ff0000" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="Test 2"
        android:textColor="#00ff00" />
</LinearLayout>

当文本较短时,这是正常的(见下图):

但当红色文本较长(或屏幕较窄)时,绿色文本将丢失:

因为绿色文本是一个单词,我希望它有优先权,总是可见的省略红色 如果需要(并保持块居中)

它应该是这样的:

我怎样才能做到这一点


注意:我需要使用两个文本视图,因为它们必须是动画的

我认为您不需要使用两个文本视图,只需使用一个文本视图,然后使用SpannableStringBuilder

SpannableStringBuilder builder = new SpannableStringBuilder();

        SpannableString redSpannable = new SpannableString("here first string");
        redSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), 0, "here first string".length(), 0);
        builder.append(redSpannable);
        builder.append(" ");

        String white =  upperCase.toUpperCase();
        SpannableString whiteSpannable = new SpannableString("here second string");
        whiteSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#00ff00")), 0, "here second string".length(), 0);
        builder.append(whiteSpannable);
TextView02.setText(builder, BufferType.SPANNABLE);

我认为你不必使用两个文本视图,只需使用一个文本视图,然后使用SpannableStringBuilder

SpannableStringBuilder builder = new SpannableStringBuilder();

        SpannableString redSpannable = new SpannableString("here first string");
        redSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), 0, "here first string".length(), 0);
        builder.append(redSpannable);
        builder.append(" ");

        String white =  upperCase.toUpperCase();
        SpannableString whiteSpannable = new SpannableString("here second string");
        whiteSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#00ff00")), 0, "here second string".length(), 0);
        builder.append(whiteSpannable);
TextView02.setText(builder, BufferType.SPANNABLE);

我通过使用重量得到了您期望的结果:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Lorem ipsumsvasvdfbfgnbgndnnghnghnghngngnbfgbsdfbsdfdsfvsdfvfv"
        android:textColor="#ff0000"
        android:layout_weight="1"
        android:layout_width="0dp" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="Test 2"
        android:textColor="#00ff00" />

</LinearLayout>

我通过使用权重得到了您期望的结果:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="Lorem ipsumsvasvdfbfgnbgndnnghnghnghngngnbfgbsdfbsdfdsfvsdfvfv"
        android:textColor="#ff0000"
        android:layout_weight="1"
        android:layout_width="0dp" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="Test 2"
        android:textColor="#00ff00" />

</LinearLayout>

在这里尝试一下:

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="end"
        android:gravity="right"
        android:singleLine="true"
        android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit"
        android:textColor="#ff0000" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:singleLine="true"
        android:text="TextView"
        android:textColor="#00ff00" />
</LinearLayout>

在这里尝试一下:

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/TextView02"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="end"
        android:gravity="right"
        android:singleLine="true"
        android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit"
        android:textColor="#ff0000" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:singleLine="true"
        android:text="TextView"
        android:textColor="#00ff00" />
</LinearLayout>

您可以使用布局重量atribute

试试这个

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >

<TextView
    android:id="@+id/TextView02"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:ellipsize="end"
    android:singleLine="true"
    android:text="Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum"
    android:textColor="#ff0000" />

<TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:text="Test 2"
    android:textColor="#00ff00" /></LinearLayout>


希望对您有所帮助。

您可以使用安眠药

试试这个

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >

<TextView
    android:id="@+id/TextView02"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:ellipsize="end"
    android:singleLine="true"
    android:text="Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum"
    android:textColor="#ff0000" />

<TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:text="Test 2"
    android:textColor="#00ff00" /></LinearLayout>


希望有帮助。

动态为TextView2指定最大宽度属性,它应该是: 首先获取屏幕尺寸[Width],然后获取文本视图1宽度

int maxWidth  = ScreenWidthSize - WidthOfTextView1;
textView2.setMaxWidth(maxWidth);
或者,如果您希望在dp中为每个文件自定义宽度,则在XML中:

 android:maxWidth="200dp" 

硬编码。

动态为TextView2指定最大宽度属性,它应该是: 首先获取屏幕尺寸[Width],然后获取文本视图1宽度

int maxWidth  = ScreenWidthSize - WidthOfTextView1;
textView2.setMaxWidth(maxWidth);
或者,如果您希望在dp中为每个文件自定义宽度,则在XML中:

 android:maxWidth="200dp" 

每个都硬编码。

android:layout\u Center水平=true@nobalG:这是一个线性布局,layout_centerHorizontal=true是一个relativeLayout属性。将红色文本视图的宽度更改为
0dp
,并将其
layout_权重设置为1。@opiatefuch如果OP更改了布局,它会为他解决问题吗?这与布局无关,它与权重有关。迈克·M的答案是莱特@Mike M.将此添加为答案…:)安卓:水平布局=true@nobalG:这是一个线性布局,layout_centerHorizontal=true是一个relativeLayout属性。将红色文本视图的宽度更改为
0dp
,并将其
layout_weight
设置为1。@opiatefuch如果OP更改布局,它会为他解决问题吗?这与布局无关,这与重量有关。迈克·M的答案是莱特@Mike M.将此添加为答案…:)第二个文本视图的权重在哪里?您不需要为第二个文本视图添加权重。测试代码,您将看到它是否有效。第二个文本视图的权重在哪里?您不需要为第二个文本视图添加权重。测试代码,您将看到它是否有效。