カスタムダイアログを実装するAndroidアクティビティがあります。アプリケーションは正常に実行されていますが、ダイアログが小さすぎるので、大きなダイアログを表示したいのですが、これを実現するにはどうすればよいですか?これが私のレイアウトです。 xml
<?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="match_parent"
Android:background="@color/white"
Android:orientation="vertical" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:background="@drawable/view_more_borders">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:orientation="horizontal"
Android:layout_marginTop="4dp"
Android:gravity="center_vertical">
<TextView
Android:id="@+id/share_amount"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Company Name:"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:textColor="@color/Nice_blue"
Android:typeface="sans" />
<TextView
Android:id="@+id/textViewCompanyName"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1.80"
Android:text=" "
Android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:layout_marginTop="4dp"
Android:gravity="center_vertical">
<TextView
Android:id="@+id/textView5"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Price per share:"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:textColor="@color/Nice_blue" />
<TextView
Android:id="@+id/textViewprice_pershare"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:layout_alignBaseline="@+id/Yesterday"
Android:layout_alignBottom="@+id/Yesterday"
Android:layout_marginLeft="38dp"
Android:fontFamily="sans-serif"
Android:layout_toRightOf="@+id/company"
Android:text=" "
Android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:layout_marginTop="4dp"
Android:gravity="center_vertical">
<TextView
Android:id="@+id/textView4"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Total cost:"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:textColor="@color/Nice_blue" />
<TextView
Android:id="@+id/textview_totalcost"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:layout_alignBaseline="@+id/Yesterday"
Android:layout_alignBottom="@+id/Yesterday"
Android:layout_marginLeft="38dp"
Android:fontFamily="sans-serif"
Android:layout_toRightOf="@+id/company"
Android:text=" "
Android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:layout_marginTop="4dp"
Android:gravity="center_vertical">
<TextView
Android:id="@+id/textView3"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Number of shares:"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:textColor="@color/Nice_blue" />
<EditText
Android:id="@+id/shareNumber"
Android:layout_width="0dp"
Android:layout_weight="2"
Android:layout_height="wrap_content"
Android:inputType="number"
Android:fontFamily="sans-serif"
Android:textSize="12sp"
>
<requestFocus />
</EditText>
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:layout_marginTop="4dp"
Android:gravity="center_vertical">
<TextView
Android:id="@+id/textView2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Payment method:"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:textColor="@color/Nice_blue" />
<Spinner
Android:id="@+id/spinner_paymentmode"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="2" />
</LinearLayout>
</LinearLayout>
<Button
Android:id="@+id/button_buy_shares"
style="@style/ButtonText"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/blue_button"
Android:text="Buy" />
そして、これが私の出力です。ダイアログの幅と高さを増やしたいです。
そして私のJavaファイル
public class MyDialogFragment extends DialogFragment {
public MyDialogFragment() {
}
private EditText mEditText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialogfragment, container);
// mEditText = (EditText) view.findViewById(R.id.txt_your_name);
// getDialog().setTitle("Hello");
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
return view;
}
}
実行時にダイアログディメンションを変更します。
yourDialog.show();
yourDialog.getWindow().setLayout((6 * width)/7, LayoutParams.WRAP_CONTENT);
あなたは両方の次元でそれを行うことができます、私の例では私は幅を変更しただけです。それが役に立てば幸い!
編集
私が幅を取った場所について言及するのを忘れました:
DisplayMetrics metrics = getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
編集2
このコードを試してください:
Dialog yourDialog = dialogFragment.getDialog();
yourDialog.getWindow().setLayout((6 * width)/7, (4 * height)/5);
カスタムレイアウトでAndroid:minWidthとAndroid:minHeightを設定すると、うまくいきます。
onCreateの行の下に置く
setStyle(DialogFragment.STYLE_NO_TITLE, Android.R.style.Theme_Holo_Light_Dialog_NoActionBar_MinWidth);
<style name="full_screen_dialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:minWidth" type="dimen">600dp</item>
</style>
これをstyle.xml
ファイルで使用し、ダイアログクラスでこのスタイルを使用します
正しい解決策は、ドキュメントで説明されているように、onCreateDialog
ではなくonCreateView
メソッドをオーバーライドし、AlertDialog.Builder
を使用してダイアログを作成することです。 http:// developer .Android.com/reference/Android/app/DialogFragment.html#AlertDialog
ダイアログのサイズはダイアログのサイズによって決まります。外側のレイアウトにパディングとマージンを追加してより多くのスペースを消費できますが、それによって内部のビューが再配分されることはありません。
これを試して
デバイスの画面サイズに応じたダイアログの幅と高さの設定の場合
Display display;
int DisplayWidth, DisplayHeight, DialogWidth, DialogHeight;
Dialog dialog;
display =((WindowManager)activity_context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
DisplayWidth = display.getWidth();
DisplayHeight = display.getHeight();
if(DisplayHeight > DisplayWidth)
{
DialogWidth = (6 * DisplayWidth) / 7 ;
DialogHeight = (4 * DisplayHeight) / 5 ;
}
else
{
DialogWidth = (6 * DisplayWidth) / 9 ;
DialogHeight = (4 * DisplayHeight) / 5 ;
}
dialog = new Dialog(activity_context);
// Set your dialog width and height dynamically as per your screen.
Window window = dialog.getWindow();
window.setLayout(DialogWidth,DialogHeight);
window.setGravity(Gravity.CENTER);
dialog.show();
設定してみてくださいAndroid:layout_height
をベースの値にLinearLayout
例えば
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
<!-- right here -->
Android:layout_height="100dp"
Android:background="@color/white"
Android:orientation="vertical" >
ルートビューにAndroid:minWidth/Android:minHeightを追加します。以下の例をご覧ください。
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:minWidth="300dp"
Android:minHeight="500dp">