【问题标题】:Why are '\n' characters stretching my TextView?为什么 '\n' 字符会拉伸我的 TextView?
【发布时间】:2012-03-20 19:31:40
【问题描述】:

我有 10 个垂直的 TextView,其中包含两个数字,由一条线隔开。

seatStats2[i].setText(0 + "\n" + 0);

当这些文本视图第一次可见时,它们看起来很好:

但是,如果我单击或长按屏幕上十个按钮中的任何一个,textViews 会拉伸以包含 \n 字符是否位于第一行(我测试了不同的数字组合以确认这一点)。

单击按钮的方法无论如何都没有链接到 TextViews(LongClicking 是但两者都会影响它)。无论如何,我都会为这两个听众提供代码。 textView2 是包含有问题的 textView 的数组。如果我输入更多的数字,我希望保持 textViews 的拉伸能力,但我想消除点击之间不必要的拉伸。

//Creates longClickListener, used for players to sit in or out.
    longClickListener = new View.OnLongClickListener() 
    {   
        @Override
        public boolean onLongClick(View v) 
        {
            if(moveButtonMode)
                return false;

            for(int i=0; i<10; i++)
            {
                //Each seat[i] will correspond with each imageButtoni+1
                if(v.getId() == (getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"))) 
                {
                    //If the seat is empty fill it, place a player in the seat and change the buttons colour to grey and setup stat panel
                    if(table.seats[i].getState().equals("empty"))
                    {
                        seatButton[i].setImageResource(R.drawable.black_seat);
                        table.seats[i].sit(new Player());
                        table.incrementOccupiedSeatCount();
                        seatStats[i].setVisibility(View.VISIBLE);
                        seatStats2[i].setVisibility(View.VISIBLE);
                        seatStats[i].setText(table.seats[i].getPlayer().getVpip() + "/" + table.seats[i].getPlayer().getPfr() + "/" + table.seats[i].getPlayer().getHands());
                        seatStats2[i].setText(table.seats[i].getPlayer().getSteal() + "\n" + table.seats[i].getPlayer().getThreeBet());
                    }
                    //If the seat is full, empty it
                    else
                    {
                        seatButton[i].setImageResource(R.drawable.dotted_box);
                        seatStats[i].setText("");
                        table.seats[i].sitOut();
                        table.decrementOccupiedSeatCount();
                        seatStats[i].setVisibility(View.INVISIBLE);
                        seatStats2[i].setVisibility(View.INVISIBLE);
                    }
                }
            }
            return true;
        }
    };



public void playerClickhandler(View v)
{
    if(!moveButtonMode)
    {
        for(int i = 0; i<10; i++)
        {
            if(v.getId() == getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"))
            {
                if(table.seats[i].getState() == "active")
                {
                    table.seats[i].setState("called");
                    seatButton[i].setImageResource(R.drawable.green_seat);
                }
                else if(table.seats[i].getState() == "called")
                {
                    table.seats[i].setState("raised");
                    seatButton[i].setImageResource(R.drawable.orange_seat);
                }
                else if(table.seats[i].getState() == "raised")
                {
                    table.seats[i].setState("active");
                    seatButton[i].setImageResource(R.drawable.grey_seat);
                }
            }
        }
    }
    else
    {
        for(int i = 0; i<10; i++)
        {
            if(v.getId() == getResources().getIdentifier("imageButton" + (i+1), "id", "en.deco.android.livehud"))
            {
                dealerBtnImage[table.getButtonSeat()].setVisibility(View.INVISIBLE);
                table.passButton(i);
                dealerBtnImage[table.getButtonSeat()].setVisibility(View.VISIBLE);
                moveButtonMode = false;
                nextHandButton.setEnabled(true);
            }
        }
    }
}

XML 文本视图示例

<TextView android:id="@+id/textView19" android:visibility="invisible" android:background="#000000" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_toRightOf="@+id/imageButton9" android:layout_alignParentTop="true"></TextView>
enter code here

【问题讨论】:

  • 查看 0 相互重叠的文本视图。底部图片右侧有一点额外的黑色空间
  • @Hannele 垂直的 TextView 已向右拉伸。它可能看起来很琐碎,但是当它每隔几次点击就会发生并且使我的程序非常紧张时很烦人。
  • 如果您的 textview 有透明背景,或者您使用了支持透明背景的控件,这不会打扰您。我在您提供的代码示例中看不到任何会导致更改宽度的内容。 (PS:您可以尝试强制最大宽度仅显示 X 个整数(假设您可以高于 9))
  • 这可能是Android中的一些错误。您可以尝试通过使用 2 个 TextView 来解决它 如果它甚至是您的错误,那么以这种方式修复它可能比找到您的错误更快:)
  • @Deco 可能有一种方法可以通过巧妙的布局来做到这一点。例如。在您的 &lt;TextView /&gt; android:gravity="right" android:ems="10" 中总是足够宽 10 m(因为这通常是最宽的字符)并且文本将位于 textview 的右侧。

标签: java android textview


【解决方案1】:

我看不出你提供的代码有什么问题!

因此,我最好的选择是在以下任一 getter 中添加一个 空格

table.seats[i].getPlayer().getSteal()

table.seats[i].getPlayer().getThreeBet()  // this would be more likely

根据您的代码,我认为它们代表一个字符串,也许您可​​以对它们调用 trim() 并查看它是否有帮助。

但正如已经说过的,这只是一个建议。

希望这会有所帮助,玩得开心!

【讨论】:

  • 修剪或添加空格都没有任何效果 :( 奇怪的是,在不需要的拉伸之前添加空间甚至根本没有出现。当空间在第一行,这将确认它是获得幻像字符的第一行。不知道为什么当我们进行不相关的长按时会添加这个字符,它并没有触及有问题的 TextView。我认为这是一个错误,它是相似的这个问题。stackoverflow.com/questions/8022980/…
  • 听到这个消息很难过。我希望你能解决这个问题!干杯!
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
相关资源
最近更新 更多