Android 自定義Dialog---顯示在中間(網易雲音樂選擇排序方式)
阿新 • • 發佈:2019-01-08
效果如上圖
具體實現的程式碼如下:
佈局檔案:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:background="@color/MyDark" > <TextView android:layout_width="match_parent" android:layout_height="40dp" android:text="選擇排序方式" android:gravity="center_vertical" android:textSize="20sp" android:textColor="#fff" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/main_dialog_ll_time" > <ImageView android:layout_weight="1" android:layout_width="0dp" android:layout_height="25dp" android:src="@drawable/main_dialog_addtime" /> <TextView android:layout_weight="5" android:layout_width="0dp" android:layout_height="40dp" android:text="按新增時間" android:gravity="center_vertical" android:textSize="16sp" android:textColor="#bbffffff" android:paddingLeft="10dp" /> <ImageView android:id="@+id/main_dialog_flag_time" android:layout_weight="1" android:layout_width="0dp" android:layout_height="40dp" android:src="@drawable/main_dialog_flag" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/main_dialog_ll_singer" > <ImageView android:layout_weight="1" android:layout_width="0dp" android:layout_height="25dp" android:src="@drawable/main_dialog_addtime" /> <TextView android:layout_weight="5" android:layout_width="0dp" android:layout_height="40dp" android:text="按歌手名" android:gravity="center_vertical" android:textSize="16sp" android:textColor="#bbffffff" android:paddingLeft="10dp" /> <ImageView android:id="@+id/main_dialog_flag_singer" android:layout_weight="1" android:layout_width="0dp" android:layout_height="40dp" android:src="@drawable/main_dialog_flag" android:visibility="invisible" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/main_dialog_ll_song" > <ImageView android:layout_weight="1" android:layout_width="0dp" android:layout_height="25dp" android:src="@drawable/main_dialog_addtime" /> <TextView android:layout_weight="5" android:layout_width="0dp" android:layout_height="40dp" android:text="按單曲名" android:gravity="center_vertical" android:textSize="16sp" android:textColor="#bbffffff" android:paddingLeft="10dp" /> <ImageView android:id="@+id/main_dialog_flag_song" android:layout_weight="1" android:layout_width="0dp" android:layout_height="40dp" android:src="@drawable/main_dialog_flag" android:visibility="invisible" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" android:gravity="center_vertical" android:id="@+id/main_dialog_ll_alum" > <ImageView android:layout_weight="1" android:layout_width="0dp" android:layout_height="25dp" android:src="@drawable/main_dialog_addtime" /> <TextView android:layout_weight="5" android:layout_width="0dp" android:layout_height="40dp" android:text="按專輯名" android:gravity="center_vertical" android:textSize="16sp" android:textColor="#bbffffff" android:paddingLeft="10dp" /> <ImageView android:id="@+id/main_dialog_flag_alum" android:layout_weight="1" android:layout_width="0dp" android:layout_height="40dp" android:src="@drawable/main_dialog_flag" android:visibility="invisible" /> </LinearLayout> </LinearLayout>
2.自定義MyMainDialog繼承自Dialog類
package com.mutou.www.diy; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import com.mutou.www.mtmusic.R; /** * Created by 木頭 on 2018/7/1. */ public class MyMainDialog extends Dialog{ Context context; private ClickListenerInterface clickListenerInterface; public interface ClickListenerInterface{ void doTime(); void doSinger(); void doSong(); void doAlum(); } public MyMainDialog(Context context){ super(context); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } public void init(){ LayoutInflater layoutInflater = LayoutInflater.from(context); View view = layoutInflater.inflate(R.layout.main_diy_dialog,null); setContentView(view); LinearLayout ll_time = (LinearLayout) view.findViewById(R.id.main_dialog_ll_time); LinearLayout ll_singer = (LinearLayout) view.findViewById(R.id.main_dialog_ll_singer); LinearLayout ll_alum = (LinearLayout) view.findViewById(R.id.main_dialog_ll_alum); LinearLayout ll_song = (LinearLayout) view.findViewById(R.id.main_dialog_ll_song); ll_time.setOnClickListener(new ClickListener()); ll_singer.setOnClickListener(new ClickListener()); ll_alum.setOnClickListener(new ClickListener()); ll_song.setOnClickListener(new ClickListener()); Window dialogWindow = getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); DisplayMetrics d = context.getResources().getDisplayMetrics();//獲取螢幕的寬和高用 lp.width =(int) (d.widthPixels*0.8); dialogWindow.setAttributes(lp); } public void setClickLinstener(ClickListenerInterface clickListenerInterface){ this.clickListenerInterface = clickListenerInterface; } private class ClickListener implements View.OnClickListener{ @Override public void onClick(View v) { switch (v.getId()){ case R.id.main_dialog_ll_alum: clickListenerInterface.doAlum(); break; case R.id.main_dialog_ll_singer: clickListenerInterface.doSinger(); break; case R.id.main_dialog_ll_song: clickListenerInterface.doSong(); break; case R.id.main_dialog_ll_time: clickListenerInterface.doTime(); break; } } } }
在主函式中進行呼叫
private void openDialog() { MyMainDialog myMainDialog = new MyMainDialog(this); myMainDialog.show(); myMainDialog.setClickLinstener(new MyMainDialog.ClickListenerInterface() { @Override public void doTime() { Toast.makeText(MainActivity.this, "time", Toast.LENGTH_SHORT).show(); } @Override public void doSinger() { Toast.makeText(MainActivity.this, "doSinger", Toast.LENGTH_SHORT).show(); } @Override public void doSong() { Toast.makeText(MainActivity.this, "doSong", Toast.LENGTH_SHORT).show(); } @Override public void doAlum() { Toast.makeText(MainActivity.this, "doAlum", Toast.LENGTH_SHORT).show(); } }); }
效果還不錯,還待美化。