写真のようなレイアウトでカスタムダイアログを作成したいと思います。 クロス/閉じるボタンは右上にある必要があります。この種類のレイアウトを実現するにはどうすればよいですか?.
前もって感謝します。
以下のコードはあなたにとって便利です、このように達成されます
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_vertical"
Android:gravity="center"
Android:orientation="vertical" >
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true" >
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginRight="5dp"
Android:layout_marginTop="10dp"
Android:background="@drawable/popup_password_latest"
Android:gravity="center"
Android:orientation="vertical"
Android:paddingBottom="-50dp" >
<!---add your views here-->
</LinearLayout>
<ImageView
Android:id="@+id/imageView_close"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="top|right"
Android:clickable="true"
Android:src="@drawable/close_selector" />
</FrameLayout>
</LinearLayout>
相対レイアウトが親レイアウトになり、閉じるボタンを追加しますAndroid:layout_alignParentRight="true"
およびAndroid:layout_alignParentTop="true"
さらに、要件に応じてマイナスと右側の上部マージンを指定します。
コード
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<LinearLayout
Android:id="@+id/relativeLayout1"
Android:layout_width="255dp"
Android:layout_height="385dp"
Android:layout_centerInParent="true"
Android:background="@color/white"
Android:orientation="vertical" >
</LinearLayout>
<Button
Android:id="@+id/button_close"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/relativeLayout1"
Android:layout_alignTop="@+id/relativeLayout1"
Android:layout_marginRight="-10dp"
Android:layout_marginTop="-10dp"
Android:background="@drawable/close" />
</RelativeLayout>
出力
ここに私はそのための1つの解決策を持っています。
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="15dp" >
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="@drawable/img_popup_one"
Android:orientation="vertical"
Android:padding="10dp" >
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Sign In"
Android:textColor="@color/clr_gray"
Android:textSize="16dp" />
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:background="@drawable/img_edittext_bg"
Android:hint="Username"
Android:padding="5dp"
Android:singleLine="true"
Android:textColorHint="@color/clr_gray" />
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:background="@drawable/img_edittext_bg"
Android:hint="Password"
Android:inputType="textPassword"
Android:padding="5dp"
Android:singleLine="true"
Android:textColorHint="@color/clr_gray" />
</LinearLayout>
</FrameLayout>
<ImageView
Android:layout_width="30dp"
Android:layout_height="30dp"
Android:layout_gravity="right|top"
Android:contentDescription="@string/contentDescription"
Android:src="@drawable/img_popup_close" />
</FrameLayout>
ここでPopupWindowを使用できます。カスタムダイアログのレイアウトを作成し、PopupWindowでそのレイアウトを膨らませることができます。次のようになります。
PopupWindow menuPopup;
menuView=getLayoutInflater().inflate(R.layout.layout_menu, null);
menuPopup=new PopupWindow(menuView, 200, 200, false);
menuPopup.showAtLocation(menuView, Gravity.TOP | Gravity.RIGHT, 0, 100);
![anybody can try above all but u will be facing problem background color problem
i have done very simple way
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/transparent"
>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="50dp"
Android:layout_marginLeft="50dp"
Android:layout_marginRight="50dp"
Android:layout_marginTop="50dp"
Android:background="#FFFFFF"
Android:gravity="center"
Android:orientation="horizontal" >
<LinearLayout
Android:layout_width="120dp"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:gravity="center"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/left_arrow_imageview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/up_arrow" />
<ListView
Android:id="@+id/listview_observation"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_gravity="center"
Android:layout_weight="2"
Android:padding="6dp" >
</ListView>
<ImageView
Android:id="@+id/right_arrow_imageview"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/down_arrow" />
</LinearLayout>
<View
Android:layout_width="1dp"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:layout_marginLeft="3dp"
Android:layout_marginRight="3dp"
Android:background="#B2B2B2"
Android:scrollY="@dimen/activity_vertical_margin" />
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="2"
Android:gravity="right"
Android:orientation="vertical" >
<TextView
Android:id="@+id/text_head"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="left"
Android:padding="6dp"
Android:text="@string/Observation"
Android:textSize="18sp"
Android:textStyle="bold" />
<View
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:layout_gravity="center"
Android:layout_marginLeft="3dp"
Android:layout_marginRight="3dp"
Android:background="#B2B2B2"
Android:scrollY="@dimen/activity_vertical_margin" />
<EditText
Android:id="@+id/edit_observation"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:background="#00000000"
Android:ems="10"
Android:gravity="top" >
</EditText>
<View
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:layout_gravity="center"
Android:layout_marginLeft="3dp"
Android:layout_marginRight="3dp"
Android:background="#B2B2B2"
Android:scrollY="@dimen/activity_vertical_margin" />
<Button
Android:id="@+id/button_done"
Android:layout_width="94dp"
Android:layout_height="wrap_content"
Android:layout_marginRight="14dp"
Android:layout_marginTop="3dp"
Android:background="@drawable/rectangular_view_selected"
Android:text="@string/button_done"
Android:textColor="@Android:color/white" />
</LinearLayout>
</LinearLayout>
<ImageView
Android:id="@+id/icon_close"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginRight="35dp"
Android:layout_marginTop="35dp"
Android:src="@drawable/icon_close" />
</RelativeLayout>
the dialog must be like that
private void ChildSectionView() {
final Dialog dialog = new Dialog(NewObservationActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog_obs_children);
// Grab the window of the dialog, and change the width
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(Android.graphics.Color.TRANSPARENT));
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
Window window = dialog.getWindow();
lp.copyFrom(window.getAttributes());
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
lp.width = size.x;
lp.height = size.y;
// This makes the dialog take up the full width
window.setAttributes(lp);
gridview = (GridView) dialog.findViewById(R.id.gridview_observation);
ImageView icon_close = (ImageView) dialog.findViewById(R.id.icon_close);
child_count = (TextView) dialog
.findViewById(R.id.text_child_count_dialog);
child_count.setText("Selected " + intList.size() + " more children");
SearchView searchview = (SearchView) dialog
.findViewById(R.id.search_children);
icon_close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
searchview.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextChange(String string) {
filItemAdapter("N", string);
return false;
}
});
filItemAdapter("", "");
dialog.show();
}
注意 : - - - -
the relative layout background should be transparent and dialog background also dialog.getWindow().setBackgroundDrawable( new ColorDrawable(Android.graphics.Color.TRANSPARENT));][2]
これをカスタムダイアログに使用...
private PopupWindow pw;
@SuppressWarnings("deprecation")
private void initiatePopupWindow() {
LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup,
(ViewGroup) findViewById(R.id.btncancelcat));
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.width = WindowManager.LayoutParams.FILL_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
pw = new PopupWindow(layout, lp.width, lp.height, true);
pw.showAtLocation(layout, Gravity.CENTER_VERTICAL, 0, 0);
ImageButton btncancel = (ImageButton) layout.findViewById(R.id.btncancelcat);
btncancel.setOnClickListener(cancel_click);
}
private OnClickListener cancel_click = new OnClickListener() {
public void onClick(View v) {
pw.dismiss();
}
};
popup.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/linearpopup"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#e22e2e"
Android:orientation="vertical"
Android:padding="10dp" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/darker_gray" >
</LinearLayout>
<ImageButton
Android:id="@+id/btncancelcat"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:src="@drawable/btn" />
</RelativeLayout>
その背景のボタンを追加し、alignParentTop
とalignParentRight
の位置をtrueに設定します。そして、親レイアウトをRelative
にします。