import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.RelativeLayout;
public class register_activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
RelativeLayout RLayout = (RelativeLayout) View.inflate(this, R.layout.register, null);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
Button btnCreateNew = new Button(this);
btnCreateNew.setText("Create New User");
btnCreateNew.offsetTopAndBottom(10);
btnCreateNew.offsetLeftAndRight(10);
RLayout.addView(btnCreateNew, p);
}
}
因此,代码可以正常工作并运行良好,只是我看不到正在显示的按钮。布局只是空白的,里面什么都没有。
怎么了?
你有一个NullPointerException,对吧?(检查你的日志猫!
原因:
-
创建一个按钮作为成员变量,
this
作为参数。这可能会导致一些麻烦,因为在调用new Button(this)
时可能无法定义this
。将初始化移到onCreate
-
你的
RLayout
将是空的,在这里我非常确定。原因是,在你打电话之前,你不能打电话给findViewById()
setContentView()
。如果你之前调用它,Android 不知道在哪里查看并返回 null。
更新
随着你对问题进行了很大的更改,这是我更新的答案:
您将内容设置为R.layout.register
,然后再次将其膨胀。
我给你的解决方案:只使用setContentView(R.layout.register)
,而不是使用findViewById(R.id.layout_id)
,最后创建并添加你的按钮:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
RelativeLayout RLayout = (RelativeLayout) findViewById(R.id.layout_id);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
Button btnCreateNew = new Button(this);
btnCreateNew.setText("Create New User");
btnCreateNew.offsetTopAndBottom(10);
btnCreateNew.offsetLeftAndRight(10);
RLayout.addView(btnCreateNew, p);
}
当然,您也可以直接在xml布局中添加按钮。我更喜欢这种方式,因为布局和代码之间有更好的分离。
基本 XML 结构(根据需要设置其样式(:
<RelativeLayout android:id="@+id/layout_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button android:id="@+id/button_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/button_text"/>
</RelativeLayout>
空白屏幕的原因是,您将按钮添加到新创建的RLayout
但此布局从未成为屏幕的一部分(从未由setContentView()
添加(
也许您可以尝试重新排列代码行。在主类中将Button btnCreateNew = new Button(this);
更改为Button btnCreateNew;
或者只是将整行移动到onCreate()
中。你的错误在你的日志中说了什么?
this
和 getApplicationContext()
之间有区别,请尝试将其更改为 getApplicationContext()
。
试试这个
public class register_activity extends Activity {
Button btnCreateNew;
@Override
public void onCreate(Bundle savedInstanceState) {
btnCreateNew = new Button(R.layout.register);
}
这应该有效。您没有指出按钮应从哪个 xml 中提取。
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.RelativeLayout;
public class register_activity extends Activity {
Button btnCreateNew;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
RelativeLayout RLayout = (RelativeLayout) View.inflate(this, R.layout.register, null);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
btnCreateNew = new Button(this);
btnCreateNew.setText("Create New User");
btnCreateNew.offsetTopAndBottom(10);
btnCreateNew.offsetLeftAndRight(10);
RLayout.addView(btnCreateNew, p);
setContentView(RLayout);
}
}
最后,我所要做的就是重新设置contentView
;我认为它必须是某种视图更新。
厉害!谢谢大家:)