【问题标题】:changing textView's layout gravity改变 textView 的布局重力
【发布时间】:2014-02-12 00:55:23
【问题描述】:

我在ListView 中有一个TextView。我正在尝试根据相应的文本更改textview 的对齐方式。但它不起作用。

谢谢

if (stringItem != null) {
        TextView messageText = (TextView) view.findViewById(R.id.list_item_text_view);

         if (mine==0)
             messageText.setGravity(Gravity.RIGHT);            

         if (mine==1)    
             messageText.setGravity(Gravity.LEFT);

     messageText.setText(stringItem);   
} 

我的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:orientation="vertical" >

<TextView
    android:id="@+id/list_item_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:background="@drawable/self_textview"
    android:textSize="20sp" />
</LinearLayout>

*编辑:* 我知道如何从xml 文件中更改它,但是如何从代码中更改它?

android:layout_gravity="right"

【问题讨论】:

  • 你能把结果发布到 logcat 中吗?
  • 我没有收到任何错误,但它没有设置对齐方式。所有消息都以相同的方式显示。
  • 看看变量“mine”是否初始化?
  • 哦,我猜文本的设置是正确的。但我希望整个文本视图从右到左开始,而不是从左到右。

标签: java android android-layout android-listview textview


【解决方案1】:

将 textview 宽度设置为 match_parent,Gravity 设置事物在视图内部的布局方式,因此如果将 textview 的宽度设置为列表视图项的宽度,然后设置 textview 的重力,它将在那里对齐实际文本.

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/list_item_text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:background="@drawable/self_textview"
    android:textSize="20sp" />
</LinearLayout>

我还注意到您在线性布局上设置了重力。我不会尝试混合重力和 layout_gravity 只是坚持一个。您还可以通过设置线性布局而不是文本视图的重力来获得所需的效果

【讨论】:

    【解决方案2】:

    我可以通过更改linearlayoutlayoutParams 并更改其gravity 然后将其设置为textview 来使其工作。

    LinearLayout.LayoutParams para=new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT );
                 para.gravity = Gravity.RIGHT;
                 messageText.setLayoutParams(para);
    

    将 textview 的重力改变为向右。

    【讨论】:

    • 那是因为这改变了layout_gravity,而不是gravity
    • 是的,就是这样,这是一种不好的做法吗?
    • 一点也不,我只是指出了不同之处,我真的被重力和布局重力弄糊涂了一段时间,它仍然需要一些修补。你的原始代码在xml中工作的原因是因为它设置了layout_gravity,java代码失败的原因是因为它正在设置gravity
    • 没错。这就是为什么我更新了我的 java 代码以更改 layout gravity
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多