2014-09-23 2 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

+0

나는 그것을 시도 할 것이다. 나는 사용자가 외부에 닿으면 edittext를 닫고 싶습니다. 그리고 배경에 대한 활동이 "어둡게"나타나야합니다. –

답변

1

을 지금까지이 기본 크기/위치를 원하지 않으면 코드의 대화 상자 크기/위치를 조정해야합니다.

구체적으로, AndroidManifest.xml에서 액티비티의 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'를 설정하면 대화 상자가 키보드 위에 위치하게됩니다 ... 이제는 대화 상자 내가 없앨 수 없다 –

+0

API 레벨 9에 대해 윈도우 너비를 얻을 수있는 또 다른 API가 있다고 생각합니다. Google에서 시도해 볼 수 있습니다. 언급 한 증거금은 얼마입니까? 세로 하나 또는 가로 하나? 대화 상자 스타일을 제목 없음으로 설정하고 테두리를 설정하지 않아야합니다. – Qianqian

+0

http://stackoverflow.com/a/11614063/2444099 –