2

画像ビューをテキストビューと重ねる必要があります。そして、この結合されたビューは、LinearLayout で 100 回繰り返されます。FrameLayout で ImageView と TextView が重なっているときに、LinearLayout で FrameLayout を使用し、LinearLayout で FrameLayout を 100 回繰り返すことを考えていました。xml ファイルからではなく、プログラムでこれを行う必要があります。

最初に画像とテキストビューをframelayoutに追加してから、framelayoutをlinearlayoutに追加しようとしました。しかし、それは言います:指定された子はすでに親を持っています..そうではありません。コードで教えてください。ご協力いただきありがとうございます。

このようになりますが、プログラムで行う必要があります

---linear layout--------------
------------------------------
|frame layout----------------|
||txt view on top of img view|
------------------------------
frame layout will be repeated|

---/end of linear layout------

また、分離されたコードは次のとおりです。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        LinearLayout dynamicview = (LinearLayout) findViewById(R.id.main_layout);

        FrameLayout barFrameLayout = new FrameLayout(this);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT,
                Gravity.CENTER);
        barFrameLayout.setLayoutParams(params);


        LinearLayout.LayoutParams slparams1 = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        for (int i = 65; i <= 75; i++) {
            TextView catTV = new TextView(this);
            catTV.setLayoutParams(slparams1);
            catTV.setText("===" + Character.toString((char) i) + "===");
            catTV.setTextSize(32);

            ImageView iv = new ImageView(this);
            iv.setImageResource(R.drawable.ic_launcher);
            iv.setLayoutParams(slparams1);

            barFrameLayout.addView(catTV);
            barFrameLayout.addView(iv);

            dynamicview.addView(barFrameLayout);
        }
    }
4

2 に答える 2

4

これは、達成しようとしていることを示すコードです。私RelativeLayoutは非常に柔軟な を使用しました。要素を他の要素に対して簡単に配置できます (変更する必要がある場合は、 を変更FrameLayoutできます)。

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ExampleLayout extends LinearLayout{

public ExampleLayout(Context context,AttributeSet attrs){
    super(context,attrs);

    for(int i =0; i< 100; i++){

        RelativeLayout childLayout = new RelativeLayout(context);

        ImageView img  = new ImageView(context);
        TextView text = new TextView(context);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        childLayout.addView(img, params);

        params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        childLayout.addView(text, params);

        LinearLayout.LayoutParams parentParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);           
        this.addView(childLayout,parentParams);
    }
}
}

次に、ExampleLayout クラスを使用して、それを任意の layout.xml ファイルに追加できます。

于 2013-05-02T02:23:15.230 に答える