2017-09-13 5 views
1

Ich habe festgestellt, dass mein alter Dialog nach API21 den Titel verliert. Der minimale Beispielcode wie dieses istMüssen wir Dialogfragment erstellen, damit Dialog einen Titel nach API 21 hat?

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(); 
    } 
} 

und das Layout für 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"/> 

In API21 noch den Titel, während in API24 und API26 zeigen kann, ist es nicht Titel zeigen kann, bin ich frage mich, ob Ich muss DialogFragment erstellen, um den Titel hinzuzufügen.

Antwort

0

Verwenden Alertdialog Sie den Dialog mit einem Titel in unten zeigen kann, und nach dem 21.

Code ändern wie folgt aus:

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(); 
    } 
} 

Hoffe, es hilft :)

+0

Sie Also im Grunde kann Dialog nicht direkt verwenden? – litaoshen

+0

Alertdialog von appcompat Bibliothek wird Ihnen volle Unterstützung für alte und neue APIs geben –

Verwandte Themen