Android TextView错误地破坏了行

时间:2016-09-06 04:53:10

标签: android xml android-layout

我在使用ListView中的TextView时遇到问题,其中TextView错误地破坏了这行。

为了说明问题,我要显示以下文字:

"12345678901234567 ="
"12345678901 ="
"12345678901234567 *"

我使用的xml(TextView)如下: -

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="end"
    android:textAlignment="gravity"
    android:layout_gravity="end"
    android:textAppearance="?android:attr/textAppearanceLarge"
/>

结果显示如下:

   123456789
    01234567
           =
12345678901=
   123456789
    01234567
           *

显然我不希望“=”和“*”在一个单独的行上。我有 尝试了几十种不同的xml变体而没有达到我想要的效果。

测试的仿真器是:

Nexus 6 API 23:5556

Nexus6p API 23:5556

MotoG3 Android 6

使用23.0.3编译为Android 6

使用以下xml(EditText),我得到了所需的结果:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="end"
    android:textAlignment="gravity"
    android:layout_gravity="end"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:editable="false">
</EditText>

正确的结果如下:

12345678901234
         567 =
 12345678901 =
12345678901234
         567 *

虽然我可以使用EditText,但显示不应该是可编辑的 我相信TextView应该可行。另外,“android:editable” 已被弃用。

有人读这篇文章可以告诉我如何获取TextView 按要求工作,或者如何使用EditText 一个不推荐的功能,并达到预期的效果?

.........添加到问题----------

用于在测试程序中创建ListView的代码如下: -

private void createLayout() {

    RelativeLayout wRelLayout = new RelativeLayout(this);

    wRelLayout.setBackgroundColor(Color.DKGRAY);

    RelativeLayout.LayoutParams jLayParams = new RelativeLayout.LayoutParams(500, 700);

    setContentView(wRelLayout, jLayParams);

    ArrayList<String> alCalcLines = new ArrayList();
    ListView lvCalcLines = new ListView(this);
    lvCalcLines.setX(10);
    lvCalcLines.setY(10);
    lvCalcLines.setBackgroundColor(Color.WHITE);
    lvCalcLines.setPadding(10, 10, 10, 10);
    lvCalcLines.setAdapter(new ArrayAdapter<>(
            this, R.layout.text_view_1, alCalcLines));  // xml

    jLayParams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.MATCH_PARENT,
            RelativeLayout.LayoutParams.MATCH_PARENT);

    wRelLayout.addView(lvCalcLines, jLayParams);

    alCalcLines.add("12345678901234567 =");
    alCalcLines.add("12345678901 =");
    alCalcLines.add("12345678901234567 *");
}

4 个答案:

答案 0 :(得分:0)

将此添加到您的编辑文字XML中,对我有用。

<EditText
    android:clickable="false" 
    android:cursorVisible="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false"/>

答案 1 :(得分:0)

  

在Textview或edittext

中尝试这些
 txt_view.setTextDirection(View.TEXT_DIRECTION_RTL);

 txt_view.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
  

同样在android:supportsRtl =&#34; true&#34;到应用程序

     

在xml中

 android:textDirection="rtl"

将重力设置为右

答案 2 :(得分:0)

如果你不想要一个单词(在你的情况下&#34; =&#34;是单词,因为它用空格分隔)不能转移到下一行,你可以使用不间断的空间
它在Android中为\u00A0。所以你的String看起来像这样:

"12345678901234567\u00A0="
"12345678901\u00A0="
"12345678901234567\u00A0*"

答案 3 :(得分:-1)

在textview行

中添加[android:SingleLine =&#34; true&#34;]