Androidはコードに線形レイアウトLinearLayoutと相対レイアウトRelativeLayoutを設定する各種属性を開発
1,1つ目はxmlレイアウトファイルを全く定義しないことです.レイアウトファイルはJavaファイルに完全に書かれています.コードは以下の通りです.
2、既に親レイアウトがある場合は、親レイアウトのコントロールのパラメータを設定したいだけです.ダイアログボックスをカスタマイズした場合、ダイアログボックスの内容はリスト形式で、リストitemのレイアウトをカスタマイズしました.以下のようにします.
次にDialogListItemクラスを定義し、RelativeLayoutから継承します.
最後にmyDialog継承Dialogを定義し始め、MyDialogのxmlレイアウトファイルにダイアログボックスの内容を設定するとリストでなくてもよいが、タイトルとOKキャンセルボタンが中央に表示されるため、ダイアログボックスの内容も中央に表示され、親レイアウトにandroid:gravity=「center_horizontal」という属性が設定されている.LinearLayoutレイアウトのすべてのコントロールが中央に表示されます.
ここでaddListItemという関数は、今回の説明のポイントです.
ここではLinearlayoutを使いましたLayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); lp.gravity=Gravity.LEFT;
に表示されます.
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;
に表示されます.