2016-07-27 32 views
0

我有一個自定義對話框設置和我的佈局的寬度設置爲wrap_content但它仍然採取整個屏幕寬度。我甚至嘗試將寬度設置爲100dp並且它仍然使用整個屏幕爲什麼會發生這種情況?Android對話框wrap_content不工作

我已經建立了對話是這樣的:

public class DialogGoToLine extends Dialog 
{ 
//The root view of the dialog 
private static View rootView; 

public DialogGoToLine(Context context, int themeResId){ 
    super(context, themeResId); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    //Allow the dialog to be canceled by tapping out of its bounds 
    setCancelable(true); 

    //Inflate the custom layout 
    LayoutInflater layoutInflater = LayoutInflater.from(HotspotHelper.getAppContext()); 
    rootView = layoutInflater.inflate(R.layout.dialog_go_to_line, null); 

    //Set up the layout 
    //setTitle(HotspotHelper.getAppContext().getString(R.string.clientDetails)); 
    //setTitle("Go to line"); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(rootView); 

    final EditText editText = (EditText) rootView.findViewById(R.id.editTextGoToLine); 

    Button buttonGoToLine = (Button) rootView.findViewById(R.id.buttonGoToLine); 
    buttonGoToLine.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View p1) 
      { 
       int line = Integer.valueOf(editText.getText().toString()) - 1; 
       ((LinearLayoutManager)LogActivity.recyclerViewLog.getLayoutManager()).scrollToPositionWithOffset(line, (int)HotspotHelper.dpToPx(30)); 
       dismiss(); 
      } 
    }); 
} 
} 

而且佈局XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="100dp" 
android:layout_height="wrap_content" 
android:background="@color/colorPrimary" 
android:gravity="center_vertical" 
android:orientation="horizontal"> 

<TextView 
    android:id="@+id/textViewGoToLabel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="4dp" 
    android:labelFor="@+id/editTextGoToLine" 
    android:text="Go to line: " 
    android:background="@color/accent" 
    android:textColor="@color/primaryText" 
    android:textSize="18sp"/> 

<EditText 
    android:id="@id/editTextGoToLine" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:layout_margin="4dp" 
    android:layout_centerVertical="true" 
    android:inputType="number" 
    android:gravity="center" 
    android:textSize="18sp"/> 

<Button 
    android:id="@+id/buttonGoToLine" 
    android:layout_width="wrap_content" 
    android:text="Go" 
    android:layout_margin="4dp" 
    android:textSize="18sp" 
    android:layout_height="wrap_content"/> 

艾迪T 1 如果它的確與衆不同,這個對話框有在我宣佈背景這繪製風格:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/colorPrimary"/> <corners android:radius="2dp" /> </shape>

+0

遠射:我在Studio的即時運行中遇到了與對話相關的錯誤。如果你正在使用它,你可以嘗試卸載應用程序並重試? – Shaishav

+0

你的父母linear_layout寬度是100dp – vinoth12594

+0

@ Shaishav我目前在我的手機上沒有即時運行的AIDE – TychoTheTaco

回答

1

出於某種原因,刪除我應用於該對話框的主題修復了wrap_content問題。自定義主題所做的唯一的事情就是設置對話框的背景,但刪除它已經解決了這個問題。

1

我面臨同樣的問題,我遇到了一個解決方案。如果您將固定寬度或wrap_content提供給佈局的根目錄,則不會考慮此問題。我不知道這背後的原因。將一個父佈局放在根內部,並將所需的寬度和高度提供給內部父級,將所有視圖放在此父級內。我希望它有幫助。

<?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/colorPrimary" 
    android:gravity="center_vertical" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     //put all your views inside this linear layout 

     <TextView......./> 
     <TextView......./> 
     <TextView......./> 
    </LinearLayout> 

</LinearLayout> 
+0

不幸的是,沒有工作,對話框屏幕右側仍然有一堆空的空間 – TychoTheTaco

0

嘗試在你的主線性佈局改變android:orientation="vertical"因爲您正在使用線性佈局,水平方向使所有的部件都水平排列,他們正在獲得分配給他們的空間水平,這就是爲什麼它覆蓋整個屏幕。

0

顯示對話框之前,試試這個:

dialog.getWindow().setLayout(context.getResources().getDimensionPixelSize(R.dimen.dialog_width), WindowManager.LayoutParams.WRAP_CONTENT) 

dialog_width100dp

1

使用必須使用這種方法的setContentView(View view, ViewGroup.LayoutParams params)代替setContentView(rootView);

ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(
     ViewGroup.LayoutParams.WRAP_CONTENT, 
     ViewGroup.LayoutParams.WRAP_CONTENT); 
//ViewGroup.LayoutParams params= new ViewGroup.LayoutParams(
//  300, 
//  300); 
//for coustom size 
params.height = thumb_size; 
params.width = thumb_size; 
// set padding ,margins ,gravity as your desired 

使用此的setContentView(rootView,則params);

+0

getLayoutParams()給我一個NPE – TychoTheTaco

+0

用你想要的寬度和高度創建新的佈局參數它是佈局參數的示例代碼。 –

+0

我已經解決了這個問題,通過從自定義主題中刪除背景屬性,並將其應用於父佈局而不是對話框本身 – TychoTheTaco