2017-09-13 10 views
1

API21 후에 이전 대화 상자에서 제목이 사라지는 것을 발견했습니다. 최소한의 샘플 코드는이Dialogfragment를 만들어서 Dialog가 API 21 이후 title을 가질 수 있도록해야합니까?

public class MainActivity extends AppCompatActivity { 
    private Button btn1; 
    private Dialog testDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     testDialog = new Dialog(MainActivity.this); 
     btn1 = (Button) findViewById(R.id.btnClick); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showCopyDialog("some test"); 
      } 
     }); 
    } 

    private void showCopyDialog(final String address) { 
     testDialog.setTitle(address); 
     testDialog.setContentView(R.layout.copy_chip_dialog_layout); 
     testDialog.setCancelable(true); 
     testDialog.setCanceledOnTouchOutside(true); 
     Button button = (Button)testDialog.findViewById(android.R.id.button1); 
     String buttonTitle = "Button Title"; 
     button.setText(buttonTitle); 
     testDialog.show(); 
    } 
} 

그리고 API24과 API26에, 그것은 제목을 표시 할 수 없습니다 동안 아직도 제목을 표시 할 수 있습니다 API21에서 copy_chip_dialog_layout

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Copy Addresses" 
    android:id="@android:id/button1" 
    android:background="@null" 
    android:layout_gravity="left"/> 

의 레이아웃처럼, 난 궁금 해요 제목을 추가하려면 DialogFragment를 만들어야합니다.

답변

0

사용 에 AlertDialog 아래에 제목과 대화 상자를 표시 할 수 있습니다 및 21

후이 같은 코드를 변경

:

public class MainActivity extends AppCompatActivity { 
    private Button btn1; 
    private AlertDialog testDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn1 = (Button) findViewById(R.id.btnClick); 
     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showCopyDialog("some test"); 
      } 
     }); 
    } 

    private void showCopyDialog(final String address) { 
     AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this); 
     View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.copy_chip_dialog_layout,null); 
     dialogBuilder.setCancelable(false); 
     dialogBuilder.setView(dialogView); 
     Button button = (Button)dialogBuilder.findViewById(android.R.id.button1); 
     button.setText("Button Title"); 
     testDialog= dialogBuilder.create(); 
     testDialog.show(); 
    } 
} 

이 도움이 :)

+0

을 그래서 기본적 희망 당신 Dialog를 직접 사용할 수 없습니까? – litaoshen

+0

appcompat 라이브러리의 Alertdialog는 이전 API와 새로운 API를 완벽하게 지원합니다. –