android - 以编程方式创建多个线性布局和分隔线

标签 android android-linearlayout

在我的应用程序中。有一个 Activity 包含多个以编程方式创建的线性布局和分隔符运行良好

但我必须将线性布局和分隔线复制 5 次,除了两点外其他都是一样的:

1-每个线性布局都有不同的字符串。

2- 第一个分频器边距与其他分频器边距不同。

是否有更好的方法来使用更简洁、更短的代码。

任何帮助将不胜感激。

public class Dreams extends Activity {

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Boolean customTitleSupported =  
      requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     setContentView(R.layout.trip);  
     if (customTitleSupported) { 

  getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title); 
  } 
         TextView tv = (TextView) findViewById(R.id.title); 
         tv.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
         tv.setText("Dreams");  

     LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);       
        // add text view
        TextView tv1 = new TextView(this);
        tv1.setGravity(Gravity.RIGHT);
        tv1.setTextSize(30);    
        tv1.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv1);
        tv1.setText(Html.fromHtml(getString(R.string.dreams))); 

        ImageView divider1 = new ImageView(this);
        LinearLayout.LayoutParams lp1 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp1.setMargins(40, 0, 40, 0);
        divider1.setLayoutParams(lp1);
        divider1.setBackgroundColor(Color.RED);
        ll.addView(divider1);

        TextView tv2 = new TextView(this);      
        tv2.setGravity(Gravity.RIGHT);
        tv2.setTextSize(30);
        tv2.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv2);
        tv2.setText(Html.fromHtml(getString(R.string.dream_1)));

        ImageView divider2 = new ImageView(this);
        LinearLayout.LayoutParams lp2 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp2.setMargins(10, 10, 10, 10);
        divider2.setLayoutParams(lp2);
        divider2.setBackgroundColor(Color.RED);
        ll.addView(divider2);       

        TextView tv3 = new TextView(this);
        tv3.setGravity(Gravity.RIGHT);
        tv3.setTextSize(30);
        tv3.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv3);
        tv3.setText(Html.fromHtml(getString(R.string.dream_2)));

        ImageView divider3 = new ImageView(this);
        LinearLayout.LayoutParams lp3 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp3.setMargins(10, 10, 10, 10);
        divider3.setLayoutParams(lp3);
        divider3.setBackgroundColor(Color.RED);
        ll.addView(divider3);

        TextView tv4 = new TextView(this);
        tv4.setGravity(Gravity.RIGHT);
        tv4.setTextSize(30);    
        tv4.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv4);
        tv4.setText(Html.fromHtml(getString(R.string.dream_3)));    

        ImageView divider4 = new ImageView(this);
        LinearLayout.LayoutParams lp4 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp4.setMargins(10, 10, 10, 10);
        divider4.setLayoutParams(lp4);
        divider4.setBackgroundColor(Color.RED);
        ll.addView(divider4);

        TextView tv5 = new TextView(this);      
        tv5.setGravity(Gravity.RIGHT);
        tv5.setTextSize(30);
        tv5.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv5);
        tv5.setText(Html.fromHtml(getString(R.string.dream_4)));

        ImageView divider5 = new ImageView(this);
        LinearLayout.LayoutParams lp5 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp5.setMargins(10, 10, 10, 10);
        divider5.setLayoutParams(lp5);
        divider5.setBackgroundColor(Color.RED);
        ll.addView(divider5);

        TextView tv6 = new TextView(this);
        tv6.setGravity(Gravity.RIGHT);
        tv6.setTextSize(30);
        tv6.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
        ll.addView(tv6);
        tv6.setText(Html.fromHtml(getString(R.string.dream_5)));

        ImageView divider6 = new ImageView(this);
        LinearLayout.LayoutParams lp6 = 
         new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        lp6.setMargins(10, 10, 10, 10);
        divider6.setLayoutParams(lp6);
        divider6.setBackgroundColor(Color.RED);
        ll.addView(divider6);
        }
    }

最佳答案

因为所有改变的都是 TextView setText(),您可以将它变成一个带有字符串输入列表的 for 循环。例如:

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout);       

String[] textEntries = {  getString(R.string.dream),
                          getString(R.string.dream_1),
                          getString(R.string.dream_2),
                          getString(R.string.dream_3),
                          getString(R.string.dream_4),
                          getString(R.string.dream_5)
                        };

for ( int i = 0; i < textEntries.length; i++)
{
    TextView tv = new TextView(this);
    tv.setGravity(Gravity.RIGHT);
    tv.setTextSize(30);
    tv.setTypeface(FontFactory.getOldEnglish(getBaseContext()));
    ll.addView(tv);
    tv.setText(Html.fromHtml(textEntries[i]));

    ImageView divider = new ImageView(this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
    lp.setMargins(10, 10, 10, 10);
    divider.setLayoutParams(lp);
    divider.setBackgroundColor(Color.RED);
    ll.addView(divider);
}

关于android - 以编程方式创建多个线性布局和分隔线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410603/

相关文章:

android - 获取 id 可绘制资源数组

android - 线性布局 - 只有 RecyclerView 滚动

Android layout_weight 组件

java - Android:无法发出位置请求对话框并在回调中获取位置

android - Android Studio无法无故完成Gradle执行

android - 如何检测 VideoView 是否正在播放视频或正在缓冲?

android - 在 LinearLayout 中设置 View 的属性

android - 是否可以颠倒垂直 LinearLayout 中布局的 View 顺序?

android - 如何知道在android中加载布局需要多少时间?

android - Kotlin改型预期为begin_array,但在第1行为begin_object