2014-09-23 50 views
0

我想要實現以下設計:帶有自定義佈局的對話框,以編程方式創建。它將包含一個EditText和一個Button。我想讓軟鍵盤在對話框出現時彈出,我希望對話框水平填充屏幕並將其置於鍵盤的正上方。全寬對話框,放在軟鍵盤上方

這裏是我做了什麼現在:

   final AlertDialog obsDialog = new AlertDialog.Builder(ProdutoDetalheActivity.this).create(); 
       final View obsLayout = View.inflate(getApplicationContext(), R.layout.observation_layout, null); 
       Button obsButton = (Button) obsLayout.findViewById(R.id.observation_button); 
       obsEdit = (EditText) obsLayout.findViewById(R.id.observation_edit); 
       obsButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         text.setText(String.valueOf(obsEdit.getText())); 
         obsDialog.dismiss(); 
        } 
       }); 
       obsDialog.setView(obsLayout); 
       obsDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); 
       obsDialog.show(); 
       obsEdit.requestFocus(); 

但是,這並不使對話全寬,也不叫軟鍵盤。我仍然想知道如何將對話框與鍵盤對齊。

我試過theseanswers沒有成功。

在此先感謝您的幫助!

[編輯]我用下面的代碼所帶來的鍵盤了起來:

obsDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); 
obsDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

[編輯]以下是設計的PRINTSCREEN我想要實現: Image 1

+2

這是甚至在這一點上的對話?你可以用'softInputMode =「adjustResize」'來使用透明的'Activity'。 – kcoppock 2014-09-25 15:55:31

+0

我會嘗試。如果用戶在外面觸摸,我希望edittext解散。當它出現在背景上的活動應該「變暗」。 – 2014-09-25 17:09:36

回答

1

據據我所知,如果你不需要默認大小/位置,你必須調整代碼中的對話框大小/位置。

在你的案例中,你可以先在AndroidManifest.xml中爲activity的windowSoftInputMode聲明adjustResize。

之後,你可以在底部設置你的對話框重力和設置寬度在對話框片段在onStart:

... 
    getDialog().getWindow().setLayout(mWidth, mHeight); 
    WindowManager.LayoutParams lp = getDialog().getWindow().getAttributes(); 
    lp.gravity = Gravity.BOTTOM; 
    lp.x = 0; lp.y = 0; 
    getDialog().getWindow().setAttributes(lp); 
    ... 

的mWidth和mHeight中的onCreate被初始化,但我認爲你可以做到這一點在onStart中也是如此。爲了得到寬,我用下面的代碼:

Point size = new Point(); 
    WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    display.getSize(size); 
    mWidth = size.x; 

希望這能滿足您的要求。我用它創建了一個類似的對話框,但是我沒有在對話框中進行編輯。我需要它在屏幕的底部。

+0

'display.getSize()'需要API 13,而我需要一個適用於API 9的解決方案。儘管如此,設置'Gravity'和'windowSoftInputMode'確實將對話框放置在鍵盤上方...現在,我無法擺脫的對話框 – 2014-09-30 17:26:15

+0

對於API級別9,我認爲還有另一個可以獲得窗口寬度的API,您可以試試Google。你提到的利潤率是多少?垂直的還是水平的?您需要將對話框樣式設置爲無標題,無邊框。 – Qianqian 2014-10-02 01:06:12

+0

查看http://stackoverflow.com/a/11614063/2444099 – 2014-10-02 12:56:49