2013-02-16 4 views
0

(이 창을 변경하기 위해) 경고 대화 상자를 다시 디자인하고 싶습니다. 나는 인터넷에서 검색하려고했지만 유용한 것을 찾지 못했습니다. 또한 경고 대화 상자 레이아웃을 넣으려고했지만 시스템이이 작업을 찾지 못했습니다 ... 저는 Android에서 초보자입니다. 내 코드 :AlertDialog를 다시 디자인하는 방법

import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.view.View.OnClickListener; 

public class Magie extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.magie); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     final Button magie1 = (Button) findViewById(R.id.bma1); 
     magie1.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      magie1(); 
      } 

     }); 

     final Button magie2 = (Button) findViewById(R.id.bma2); 
     magie2.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      magie2(); 
      } 

     }); 

     final Button magie3 = (Button) findViewById(R.id.bma3); 
     magie3.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      magie3(); 
      } 

     }); 

     final Button magie4 = (Button) findViewById(R.id.bma4); 
     magie4.setOnClickListener(new OnClickListener(){ 


      public void onClick(View v) { 
       // TODO Auto-generated method stub 
      magie4(); 
      } 

     }); 
    } 

    private void magie1(){ 
     AlertDialog.Builder ad = new AlertDialog.Builder(this); 
     ad.setTitle("title1"); 
     ad.setMessage("text1"); 
     ad.show(); 
    } 

    private void magie2(){ 
     AlertDialog.Builder ad = new AlertDialog.Builder(this); 
     ad.setTitle("title2"); 
     ad.setMessage("text2"); 
     ad.show(); 
    } 

    private void magie3(){ 
     AlertDialog.Builder ad = new AlertDialog.Builder(this); 
     ad.setTitle("title3"); 
     ad.setMessage("text3"); 
     ad.show(); 
    } 

    private void magie4(){ 
     AlertDialog.Builder ad = new AlertDialog.Builder(this); 
     ad.setTitle("title4"); 
     ad.setMessage("Text4"); 
     ad.show(); 
    } 

} 

답변

0

경고의 창 장식과 테마는 안드로이드 버전과 안드로이드 버전에서 근본적으로 변화하고, 또한 자주 주어진 버전의 OEM 수정에 의해 정의된다. AlertDialog 시스템 자원 및 테마를 활동에서 재사용하는 안전한 방법은 없습니다. 필요한 일부 리소스가 숨겨져 있습니다. AlertDialogs의 상당 부분은 레이아웃 파일이 아닌 코드로 빌드됩니다. 이상하지만 사실.

이렇게하면 두 가지 중 하나가 선택됩니다.

(1) AlertDialog.Builder.setView()를 사용하여 사용자 정의 레이아웃을 경고 대화 상자에 삽입하십시오.

분명히 바람직한 접근 방식입니다. 이 접근법에는 약간의 주제 문제가 있습니다. 배경이 흰색이거나 검은 색이라고 가정하지 말고 모든 컨트롤에서 기본 색상을 재정의하지 않는 것이 좋습니다. (예 : 가벼운 테마를 사용하는 경우에도 파란색 배경에 모든 알림을 표시하고 밝은 테마를 사용하면 파란색 배경에 검은 색 텍스트가 표시되는 Samsung Galaxy Tab 1.0). 보기에서 명시적인 색상을 사용해야하거나 밝은 테마를 사용하는 경우보기의 배경이 단색 (밝은 주제는 흰색, 기본 테마는 검정)이어야합니다.

가능한 경우 대화 상자 단추를 추가하는 데 AlertDialog.Builder 메서드를 사용하십시오. 그리고 AlertDialog.Builder.setIcon 및 AlertDialog.Builder.setTitle을 호출하여 Alert 다이얼로그에 제목 표시 줄을 표시하는 것을 잊지 마십시오.

(2) 원하는 Android 버전에 대한 알림을 모방 한 활동을 만드십시오.

이렇게하면 런타임시 Android 시스템 리소스를 실제로 사용할 수 없습니다. 그러나 필요한 경우 Android SDK에서 리소스를 훔칠 수 있습니다. 안드로이드의 모든 버전에 대한 주식 리소스 파일은 SDK의 "platforms"디렉토리에서 찾을 수 있습니다. 일반적인 생각은 모든 장식을 제거하고 레이아웃 파일의 창 장식을 에뮬레이트하는 활동에 대한 스타일을 설정한다는 것입니다.

styles.xml: 

<style name="Theme.TutorialDialog" parent="android:style/Theme.Black"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowIsFloating">true</item> 
</style> 

AndroidManifest.xml: 
    <activity 
      android:name="com.twoplay.twoplayer2.TutorialActivity" 
      ... 
     android:theme="@style/TutorialDialog" 
    /> 

이렇게하면 액티비티 바로 아래에 부동 투명한 Activity가 생성됩니다. 제목 표시 줄과 단추를 다시 만드는 것은 여러분에게 달려 있습니다. 레이아웃에서 패딩 또는 여백을 사용하여 내용 주위에 투명 테두리를 넣으십시오. sdk 플랫폼 디렉토리에서 할 수있는 자원을 청소하십시오. 아니요, 다이얼로그가 사용하는 경고 버튼 스타일을 재현 할 수있는 기성품 방법이 없습니다. 이것은 갈 길이 멀기 때문에 최후의 수단으로 사용해야합니다.

가끔 유용한 패턴 : 경고 대화 상자를 래핑하는 활동 만들기. 위에 제공된 사용자 정의 테마를 사용하여 창 장식을 제거하십시오. Activity.onCreate에서 뷰를 설정하지 않습니다. 그냥 비워 둬. 그런 다음 onCreate 내에서 경고를 만들고 표시하십시오. 그런 다음 경고에 대한 단추 핸들러가 포함 된 Activity에서 Activity.finish()를 호출합니다. 이는 여러 활동에 걸쳐 알림 대화 상자를 깨끗하게 재사용하려는 경우 유용 할 수 있습니다. 또는 백그라운드에서 시스템 활동에 대한 응답으로 경고 대화 상자를 실행해야하는 경우 또는 알림 표시 줄 버튼을 누르면 & c가 표시됩니다.

희망이 있습니다. 짧은 대답 : AlertDialog.Builder.setView를 인간적으로 가능하면 사용하십시오.

관련 문제