android 通过代码创建组件和布局,不使用xml文件

文章标签: android
2015-3-21 23:03:14     人阅读    

如题:现在标准的android开发方式是通过在xml中配置所欲哦的组件和布局,然后在android中引入,把配置好的xml关联到代码中就行展示,现在想使用非xml方式,直接通过代码实现....

// 我的测试代码如下
String[] wordlist = new String[] {a, b, c};
LinearLayout list_item_layout = new LinearLayout(this);

list_item_layout.setId(5000);
TextView listText = new TextView(this);

listText.setId(5001);
listLayout.addView(listText);
ListView list = new ListView(this);


list.setAdapter(new MyAdapter(this, list_item_layout.getId(), listText.getId(), wordlist));
and then for MyAdapter...
private class MyAdapter extends ArrayAdapter<String> {

    public MyAdapter(Context context, int resource, int textViewResourceId, String[] strings) {
        super(context, resource, textViewResourceId, strings);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView; //is this the list_item_layout that I passed??
        TextView tv = (TextView) v.findViewById(5001);
        tv.setText( wordlist[position] );

        return v;
    }
}

运行上面的代码报错如下:我是android新手,刚开始好多的地方都不懂..

10-08 23:11:19.775: E/AndroidRuntime(18276): FATAL EXCEPTION: main
 
    10-08 23:11:19.775: E/AndroidRuntime(18276): android.content.res.Resources$NotFoundException: String resource ID #0x0
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.content.res.Resources.getText(Resources.java:222)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.widget.TextView.setText(TextView.java:3011)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at com.turista.client.TuristaClientMain.onClick(TuristaClientMain.java:113)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.view.View.performClick(View.java:2538)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.view.View$PerformClick.run(View.java:9152)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.os.Handler.handleCallback(Handler.java:587)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.os.Handler.dispatchMessage(Handler.java:92)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.os.Looper.loop(Looper.java:123)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at android.app.ActivityThread.main(ActivityThread.java:3691)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at java.lang.reflect.Method.invokeNative(Native Method)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at java.lang.reflect.Method.invoke(Method.java:507)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
    10-08 23:11:19.775: E/AndroidRuntime(18276):    at dalvik.system.NativeStart.main(Native Method)


解决方法: 下面是一个完整的例子. 需要动态的创建 LinearLayout.LayoutParams 才行..


 

public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout=new LinearLayout(this);
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);//定义布局管理器的参数
layout.setOrientation(LinearLayout.VERTICAL);//所有组件垂直摆放
//定义显示组件的布局管理器,为了简单,本次只定义一个TextView组件
LinearLayout.LayoutParams text=new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);//定义文本显示组件

TextView txt=new TextView(this);
txt.setLayoutParams(text);//配置文本显示组件的参数
txt.setText("动态生成内容");//配置显示文字
txt.setTextSize(20);
layout.addView(txt, text);
super.setContentView(layout,param);

}
}


原文地址:http://www.itmmd.com/201503/665.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

  上一篇
下一篇  android videoview播放网络视频和sd卡中的视频
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!