setGravity无法正常工作

时间:2011-12-19 21:48:10

标签: android android-layout

请参阅下面的代码。我无法使SetGravity工作。

怎么回事?

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="25dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:longClickable="true"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/etCommands"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Type a command"
        android:password="true" />


    <LinearLayout
        android:weightSum="100"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <Button
        android:layout_weight="20"
        android:id="@+id/btnResults"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Results" />

    <ToggleButton
        android:paddingBottom="10dp"
         android:layout_weight="80"
        android:id="@+id/passTog"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ToggleButton" android:checked="true"/>

    </LinearLayout>

    <TextView
        android:id="@+id/tvResults"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="invalid" />

</LinearLayout>

java代码:

public class TextPlay extends Activity {

    private static final String TAG = "MyApp";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.text);

        Button chkCmd = (Button) findViewById(R.id.btnResults);
        final ToggleButton passTog = (ToggleButton) findViewById(R.id.passTog);
        final EditText input = (EditText) findViewById(R.id.etCommands);
        final TextView display = (TextView) findViewById(R.id.tvResults);

        passTog.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // TODO Auto-generated method stub

                if (passTog.isChecked()) {

                    input.setInputType(InputType.TYPE_CLASS_TEXT
                            | InputType.TYPE_TEXT_VARIATION_PASSWORD);

                } else {

                    input.setInputType(InputType.TYPE_CLASS_TEXT);

                }

            }
        });

        chkCmd.setOnClickListener(new View.OnClickListener() {

                @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                String check = input.getText().toString();

                Log.i(TAG, "Check Value is: " + check);

                if (check.contentEquals("left")) {
                    Log.i(TAG, "I am under left ");
                    display.setGravity(Gravity.LEFT); //WHYW ILL YOU NOT WORK SETGRAVITY?????????????
                } else if (check.contentEquals("center")) {
                    display.setGravity(Gravity.CENTER);

                } else if (check.contentEquals("right")) {
                    display.setGravity(Gravity.RIGHT);
                }

                else if (check.contentEquals("blue")) {
                    display.setGravity(Gravity.RIGHT);
                }

            }
        });
    }
}

12 个答案:

答案 0 :(得分:3)

我刚刚测试过它的确有效......你可能做错了一些事情;

首先,当您在文本字段中键入“left”时,是否确保未键入“Left”(大多数键盘将首字母大写)

如果您确定上述内容,您是否看到“我在左下方”的日志(不是“检查是”)?如果没有,那么它不会以某种方式到达那里......

如果你确实看到它,你可能想要清理/构建你的项目(在Eclipse Project中 - &gt; Clean -it做清理和重建)

如果这两者都不起作用,您可能想要更改目标构建(将其更改为API级别10左右)如果您只是将其用作练习,则实际上不需要担心目标构建学习。

答案 1 :(得分:1)

我认为我们无法以这种方式更改UI。 我通常喜欢这样。

TableLayout table1 = (TableLayout) findViewById(R.id.table1);
txtresult.setGravity(Gravity.RIGHT);
((TableLayout) table1).addView(txtresult);

它适用于我。 所以我建议你做一个像删除TextView“显示”的技巧,并生成一个具有新Gravity属性的新技术。

希望它有效! 灵

答案 2 :(得分:0)

尝试设置layout_gravity="center"layout_width="wrap_ontent"可能会这样做:)

答案 3 :(得分:0)

设置layout_width="wrap_content"并设置布局重力。

答案 4 :(得分:0)

您是否尝试在更改文本视图的布局属性后调用invalidate?

Android Documentation - View.invalidate()

答案 5 :(得分:0)

更改条件如下:

check.equalsIgnoreCase("left")

希望这能解决你的问题。

答案 6 :(得分:0)

View.invalidate()必须涉及UI线程。如果您正在侦听器回调中进行视图重新配置,那么您可能需要调用View.postInvalidate(),查看API

  

public void invalidate()

     

自:API级别1   使整个视图无效。如果视图可见,将在某个时间点调用onDraw(android.graphics.Canvas)。必须从UI线程调用此方法。要从非UI线程调用,请调用postInvalidate()。

答案 7 :(得分:0)

试试这个:

<LinearLayout
    android:id="@+id/llResults"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

<TextView
    android:id="@+id/tvResults"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="invalid" />

</LinearLayout>

而不是做: - tvResults.setGravity 尝试设置linearlayout的重力: - llResults.setGravity

答案 8 :(得分:0)

你的代码对我有用,我已经在一个真正的设备上测试了android 4.0.3(Nexus S),唯一可以打扰你的大写字母@Tolga E告诉你。

你可以尝试:

check.equalsIgnoreCase("left")

而不是:

check.contentEquals("left")

并进行调试,在if上放置一个断点,检查你的代码是否真的试图修改重力或者跳过那条线。

希望它有所帮助。

答案 9 :(得分:0)

如果任何关注新波士顿教程的人都会遇到同样的问题,那么这就是显示变量的问题。只需改变

 final TextView display = (TextView) findViewById(R.id.tvDisplay); 

 final TextView display = (TextView) findViewById(R.id.tvResults);

使用其他变量声明。

答案 10 :(得分:0)

我认为setGravity方法已从API 4.0中折旧。我没有看到任何其他选择。只剩下您需要使用API​​级别8.0。我也使用setGravity方法

在log cat中获得nulpointer异常

答案 11 :(得分:0)

将TextView的宽度设置为android:layout_width="fill_parent",然后您可以使用myTextView.setGravity(Gravity.CENTER)以编程方式设置它。