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);
}
}
因此代码工作正常,只有我看不到正在显示的按钮。布局只是空白,里面什么都没有。
有什么问题?
答案 0 :(得分:1)
你有一个NullPointerException,对吗? (检查你的LogCat!)
原因:
您可以使用this
作为参数创建Button作为成员变量。这可能会导致一些问题,因为调用this
时可能无法定义new Button(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()
)
答案 1 :(得分:0)
也许您可以尝试重新排列代码行。在主要课程中将Button btnCreateNew = new Button(this);
更改为Button btnCreateNew;
或者只需将整行移至onCreate()
。你的错误在你的logcat中说了什么?
答案 2 :(得分:0)
this
和getApplicationContext()
之间存在差异,请尝试将其更改为getApplicationContext()
。
答案 3 :(得分:0)
试试这个
public class register_activity extends Activity {
Button btnCreateNew;
@Override
public void onCreate(Bundle savedInstanceState) {
btnCreateNew = new Button(R.layout.register);
}
这应该有效。你没有指出应该从哪个xml中提取按钮。
答案 4 :(得分:0)
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
;我认为它必须是某种视图更新。
真棒!谢谢大家:)