请参阅下面的代码。我无法使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);
}
}
});
}
}
答案 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?
答案 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)
以编程方式设置它。