如何在Java代码中创建此UI(android xml)

时间:2012-04-20 06:26:47

标签: android xml

我有main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher"/>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@android:color/white"
        android:orientation="horizontal" >   
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
             android:background="@drawable/barslide" 
             android:layout_marginLeft="500dp"/>
    </LinearLayout>
</FrameLayout>

我想在java代码中创建与UI中相同的main.xml。我尝试编写它但它不起作用,它与xml不同。这是代码:  

void createUI(){

    LayoutParams params1 = new FrameLayout
    (LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);

    LayoutParams params2 = new android.widget.FrameLayout.LayoutParams(
    android.widget.FrameLayout.LayoutParams.FILL_PARENT,
android.widget.FrameLayout.LayoutParams.FILL_PARENT,
Gravity.BOTTOM);

FrameLayout f1 = new FrameLayout(this);
f1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

LinearLayout l2 = new LinearLayout(this);
l2.setOrientation(LinearLayout.HORIZONTAL);
l2.setLayoutParams(params2);

view1 = new page1(getBaseContext());
view360 = view1.img1(getBaseContext());
view360.setBackgroundDrawable(getResources().getDrawable(R.drawable.black1));
view360.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

slidebar = view1.img3(getBaseContext());
slidebar.setBackgroundResource(R.drawable.barslide);
slidebar.setLayoutParams(new LinearLayout.LayoutParams(300, LayoutParams.WRAP_CONTENT,Gravity.BOTTOM));


f1.addView(view360);
f1.addView(l2);
l2.addView(slidebar);

addContentView(f1, params1);
}

1 个答案:

答案 0 :(得分:0)

您的代码不能完全复制xml布局(这对评论来说很重要):

            // replace THIS(from the constructors) with your context reference
    FrameLayout fl = new FrameLayout(this);
    fl.setLayoutParams(new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT));
    ImageView imv1 = new ImageView(this); // the first ImageView
    imv1.setLayoutParams(new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT));
    imv1.setImageResource(R.drawable.ic_launcher);
    fl.addView(imv1);
    LinearLayout ll = new LinearLayout(this);
    FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.WRAP_CONTENT);
    llp.gravity = Gravity.BOTTOM;
    ll.setLayoutParams(llp);
    ll.setBackgroundColor(Color.WHITE);
    ImageView imv2 = new ImageView(this); // the second ImageView
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    float width = 300f;     
    int pWidth = (int) (metrics.density * width + 0.5f);
    LinearLayout.LayoutParams imvlp = new LinearLayout.LayoutParams(pWidth,
            FrameLayout.LayoutParams.WRAP_CONTENT);
    float margin = 500f;
    int pMargin = (int) (metrics.density * margin + 0.5f);
    imvlp.leftMargin = pMargin;
    imv2.setLayoutParams(imvlp);
    imv2.setBackgroundResource(R.drawable.food_image1);
    ll.addView(imv2);
    fl.addView(ll);

你必须修改它以使用你的对象page1(我不知道你到底想要做什么)。 此外,您确定必须使用addContentView()(可能是setContentView?)方法吗?(此方法会将视图添加到已存在的布局中)