Androidはコードに線形レイアウトLinearLayoutと相対レイアウトRelativeLayoutを設定する各種属性を開発


1,1つ目はxmlレイアウトファイルを全く定義しないことです.レイアウトファイルはJavaファイルに完全に書かれています.コードは以下の通りです.

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //        
        RelativeLayout relativeLayout=new RelativeLayout(this);
        //           
        relativeLayout.setLayoutParams(new RelativeLayout
                .LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        //new         
        TextView textView1=new TextView(this);
        //   id,     
        textView1.setId(1);
        textView1.setTextColor(Color.BLACK);
        textView1.setTextSize(20);
        textView1.setText("   new      textView1");
        //  TextView1      
        RelativeLayout.LayoutParams layoutParams=new RelativeLayout
                .LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        //  textView1         ,   LinearLayout      ,            
        //   layoutParas.gravity=Gravity.LEFT,layoutParas.setGravity(Gravity.XXX)    
        //                   ;
        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        // textView1         
        textView1.setLayoutParams(layoutParams);
        // textView1          
        relativeLayout.addView(textView1, layoutParams);

        //new        
        TextView textView2=new TextView(this);
        //   id
        textView2.setId(2);
        textView2.setTextColor(Color.RED);
        textView2.setTextSize(18);
        textView2.setText("  new     textView2");
        //  TextView   ,  
        RelativeLayout.LayoutParams layoutParams2=new RelativeLayout
                .LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layoutParams2.topMargin=150;
        layoutParams2.leftMargin=100;
        //      
        layoutParams2.addRule(RelativeLayout.BELOW, 1);//            
        layoutParams2.addRule(RelativeLayout.CENTER_HORIZONTAL);//      
        relativeLayout.addView(textView2, layoutParams2);
        setContentView(relativeLayout);
    }

}

2、既に親レイアウトがある場合は、親レイアウトのコントロールのパラメータを設定したいだけです.ダイアログボックスをカスタマイズした場合、ダイアログボックスの内容はリスト形式で、リストitemのレイアウトをカスタマイズしました.以下のようにします.


    

    


次にDialogListItemクラスを定義し、RelativeLayoutから継承します.
public class DialogListItem extends RelativeLayout {
    /**     **/
    private TextView star;
    /**     **/
    private TextView content;

    public DialogListItem(Context context) {
        this(context, null);
    }

    public DialogListItem(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DialogListItem(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initViews(context);
    }

    private void initViews(Context context) {
        LayoutInflater.from(context).inflate(R.layout.dialog_list_item, this);
        star = (TextView) findViewById(R.id.star);
        content = (TextView) findViewById(R.id.content);
    }

    public void setContent(String content) {
        this.content.setText(content);
    }

    public void setSpannedContent(Spanned content) {
        this.content.setText(content);
    }

    public void setStarInvisible() {
        star.setVisibility(INVISIBLE);
    }

}

最後にmyDialog継承Dialogを定義し始め、MyDialogのxmlレイアウトファイルにダイアログボックスの内容を設定するとリストでなくてもよいが、タイトルとOKキャンセルボタンが中央に表示されるため、ダイアログボックスの内容も中央に表示され、親レイアウトにandroid:gravity=「center_horizontal」という属性が設定されている.LinearLayoutレイアウトのすべてのコントロールが中央に表示されます.


    

        
        
    

    

    
    

    

        
        

    

    

        

那我们应该怎么更改这个不居中单个控件的布局参数呢?

那么我们就应该在MyDialog对话框中这样做:

/**
                  ,  ,       ,           show    
     * @param dialogIconResId    -1        
     * @param dialogTitleTxt      null        
     * @param dialogContentList   null        
     * @param dialogBtnOneTxt    null       
     * @param dialogBtnTwoTxt      null
     * @return
     */
    public CommonDialog set(List dialogContentList, int dialogIconResId, String dialogTitleTxt, String dialogBtnOneTxt, String dialogBtnTwoTxt) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleTxt == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleTxt);
        }
        dialogContent.setVisibility(View.GONE);
        //        ,       
        if (dialogContentList == null || dialogContentList.size() == 0) {
            dialogContentListLayout.setVisibility(View.GONE);
            //        1 ,         
        } else if (dialogContentList.size() == 1) {
            dialogContentListLayout.setVisibility(View.GONE);
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentList.get(0));
        } else {
            dialogContentListLayout.setVisibility(View.VISIBLE);
            dialogContentListLayout.removeAllViews();
            for (int i = 0; i < dialogContentList.size(); i++) {
                addListItem(dialogContentListLayout, dialogContentList.get(i));
            }
        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }
        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }

ここでaddListItemという関数は、今回の説明のポイントです.
  private void addListItem(LinearLayout parent, String item) {
        DialogListItem itemView = new DialogListItem(mContext);
        //RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        //lp.topMargin = ResourcesUtil.getDimensionPixelSize(R.dimen.dialog_list_item_margin);
        //             ,   10dp
        LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        lp.gravity=Gravity.LEFT;
        lp.topMargin=ResourcesUtil.getDimensionPixelSize(R.dimen.dialog_list_item_margin);
        itemView.setContent(item);
        //itemView.setLayoutParams(lp);
        parent.setLayoutParams(lp);
//        itemView.setPadding(60, 0, 86, 30);
        parent.addView(itemView);
    }

ここではLinearlayoutを使いましたLayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); lp.gravity=Gravity.LEFT;
に表示されます.