多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > [置頂] Android常用實(shí)例―Alert Dialog的使用

[置頂] Android常用實(shí)例―Alert Dialog的使用

來源:程序員人生   發(fā)布時(shí)間:2015-05-13 08:04:16 閱讀次數(shù):5025次

Android經(jīng)常使用實(shí)例―Alert Dialog的使用

AlertDialog的使用很普遍,在利用中當(dāng)你想要用戶做出“是”或“否”或其它各式各樣的選擇時(shí),為了保持在一樣的Activity和不改變用戶屏幕,就能夠使用AlertDialog.

代碼地址

https://github.com/JueYingCoder/AndroidUsefulExample_AlertDialog

這篇文章主要講授如何實(shí)現(xiàn)各種AlertDialog,文章比較長,如果能認(rèn)真讀完,AlertDialog的各種用法應(yīng)當(dāng)就可以掌握了,下面是我們今天要實(shí)現(xiàn)的終究效果:

這里寫圖片描述

乍1看,在利用中我們見過很多千奇百怪的對話框,但仔細(xì)分析,它還是有規(guī)律可循的,不外乎那幾種,我們要學(xué)會從簡易處著手,抽絲剝繭來掌握1項(xiàng)看起來仿佛很復(fù)雜的功能。只要我們理清了基本邏輯,其他的根據(jù)需要適當(dāng)改造就能夠?yàn)槲覀兯昧耍?
AlertDialog基本的結(jié)構(gòu)以下
這里寫圖片描述

可以將對話框主要分為3個(gè)部份:上面區(qū)域是標(biāo)題欄和圖標(biāo),中間區(qū)域是內(nèi)容區(qū),下方是button區(qū);其他情勢各異的對話框也都是基于此的變體而已!

那末要?jiǎng)?chuàng)建1個(gè)對話框,我們需要做些甚么:

1,首先需要?jiǎng)?chuàng)建1個(gè)AlertDialog.Builder對象,基本語法:

AlertDialog.Builder alertDialogBuilder=new AlertDialog.Builder(this);

2,創(chuàng)建alertDialogBuilder對象后,通過調(diào)用它的create()方法就能夠構(gòu)造出1個(gè)對話框

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();//將dialog顯示出來

3,但是我們還有1個(gè)疑問,如何設(shè)置Dialog的其他屬性呢,也就是說怎樣控制標(biāo)題,圖表區(qū)域,內(nèi)容區(qū)域和button區(qū)域,我們自但是然的想到的是1系列set方法;事實(shí)上真是如此,通過調(diào)用alertDialogBuilder對象的setXX方法來實(shí)現(xiàn):

alertDialogBuilder.setTitle();//設(shè)置標(biāo)題
alertDialogBuilder.setIcon();//設(shè)置圖表

/*設(shè)置下方按鈕*/
alertDialogBuilder.setPositiveButton();
alertDialogBuilder.setNegativeButton();
alertDialogBuilder.setNeutralButton();

/*對話框內(nèi)容區(qū)域的設(shè)置提供了多種方法*/
setMessage();//設(shè)置顯示文本
setItems();//設(shè)置對話框內(nèi)容為簡單列表項(xiàng)
setSingleChoiceItems();//設(shè)置對話框內(nèi)容為單選列表項(xiàng)
setMultiChoiceItems();//設(shè)置對話框內(nèi)容為多選列表項(xiàng)
setAdapter();//設(shè)置對話框內(nèi)容為自定義列表項(xiàng)
setView();//設(shè)置對話框內(nèi)容為自定義View

//設(shè)置對話框是不是可取消
setCancelable(booleab cancelable);
setCancelListener(onCancelListener);

綜上:對AlertDialog的使用其實(shí)主要還是針對如何設(shè)置內(nèi)容區(qū)域;

下面我們通過使用不同的內(nèi)容區(qū)域的設(shè)置方法,實(shí)現(xiàn)幾個(gè)經(jīng)常使用的對話框;
基本思路是在MainActivity中添加幾個(gè)Button,點(diǎn)擊后分別彈出對應(yīng)的AlertDialog

步驟:
- 1 .創(chuàng)建Android Project->”AlertDialogDemo”
- 2 .編寫activity_main.xml布局文件
- 3.編寫所需strings.xml
- 4.編寫MainActivity中各方法

限于篇幅的問題,現(xiàn)只貼出關(guān)鍵性部份代碼,其余的請讀者自行實(shí)現(xiàn);
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
    android:id="@+id/btn_simple_dialog"
    android:text="@string/simple_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btn_simple_list_dialog"
    android:text="@string/simple_list_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btn_single_choice_dialog"
    android:text="@string/single_choice_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btn_multi_choice_dialog"
    android:text="@string/multi_choice_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btn_custom_adapter_dialog"
    android:text="@string/custom_adapter_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btn_custom_view_dialog"
    android:text="@string/custom_view_dialog"
    android:textColor="#ffffff"
    android:textSize="18sp"
    android:background="#449F1D"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="50dp"
    android:layout_marginRight="50dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

布局效果:

這里寫圖片描述

strings.xml

<resources>
<string name="app_name">ALertDialogDemo</string>

<!-- 主界面布局所需要的字符串資源-->
<string name="action_settings">Settings</string>
<string name="simple_dialog">基本對話框</string>
<string name="simple_list_dialog">簡單列表對話框</string>
<string name="single_choice_dialog">單選項(xiàng)列表對話框</string>
<string name="multi_choice_dialog">多選項(xiàng)列表對話框</string>
<string name="custom_adapter_dialog">自定義Adapter對話框</string>
<string name="custom_view_dialog">自定義View對話框</string>

<!-- 對話框所需要的字符串資源-->
<string name="dialog_message">這里是內(nèi)容區(qū)域</string>
<string name="postive_button">肯定</string>
<string name="negative_button">取消</string>

<!-- 對話框提示信息字符串資源-->
<string name="toast_postive">你點(diǎn)擊了肯定按鈕</string>
<string name="toast_negative">你點(diǎn)擊了取消按鈕</string>

<string name="text">自定義Adapter的內(nèi)容</string>
</resources>

MainActivity.java

public class MainActivity extends ActionBarActivity implements View.OnClickListener{

//對應(yīng)各個(gè)button
private Button simpleDiaog;
private Button simpleListDiaog;
private Button singleChoiceDiaog;
private Button multiChoiceDiaog;
private Button customAdateprDiaog;
private Button customViewDiaog;
//聲明1個(gè)AlertDialog構(gòu)造器
private AlertDialog.Builder builder;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //實(shí)例化控件
    simpleDiaog= (Button) findViewById(R.id.btn_simple_dialog);
    simpleListDiaog= (Button) findViewById(R.id.btn_simple_list_dialog);
    singleChoiceDiaog= (Button) findViewById(R.id.btn_single_choice_dialog);
    multiChoiceDiaog= (Button) findViewById(R.id.btn_multi_choice_dialog);
    customAdateprDiaog= (Button) findViewById(R.id.btn_custom_adapter_dialog);
    customViewDiaog= (Button) findViewById(R.id.btn_custom_view_dialog);


    //監(jiān)聽點(diǎn)擊事件
    simpleDiaog.setOnClickListener(this);
    simpleListDiaog.setOnClickListener(this);
    singleChoiceDiaog.setOnClickListener(this);
    multiChoiceDiaog.setOnClickListener(this);
    customAdateprDiaog.setOnClickListener(this);
    customViewDiaog.setOnClickListener(this);
}

/**
 * 
 * 每一個(gè)button點(diǎn)擊后彈出對應(yīng)對話框,為了方便,各寫1個(gè)showXXDialog()方法
 */
@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.btn_simple_dialog:
            showSimpleDialog(view);
            break;
        case R.id.btn_simple_list_dialog:
            showSimpleListDialog(view);
            break;
        case R.id.btn_single_choice_dialog:
            showSingleChoiceDialog(view);
            break;
        case R.id.btn_multi_choice_dialog:
            showMultiChoiceDialog(view);
            break;
        case R.id.btn_custom_adapter_dialog:
            showCustomAdapterDialog(view);
            break;
        case R.id.btn_custom_view_dialog:
            showCustomViewDialog(view);
            break;
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
}

上述代碼都比較簡單,現(xiàn)在我們真正關(guān)心的就是如何去具體實(shí)現(xiàn)showXXDialog;


1.showSimpleDialog(): 根據(jù)我們前面所寫的基本語法,我們可以很快寫出下面這些代碼,唯1需要注意的就是監(jiān)聽兩個(gè)button,由于這是最基本也是最核心的AlertDialog,所以只要掌握了這個(gè)其他的alertDialog也就相對簡單了;

//顯示基本Dialog
private void showSimpleDialog(View view) {
    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.simple_dialog);
    builder.setMessage(R.string.dialog_message);

    //監(jiān)聽下方button點(diǎn)擊事件
    builder.setPositiveButton(R.string.postive_button, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(),R.string.toast_postive,Toast.LENGTH_SHORT).show();
        }
    });
    builder.setNegativeButton(R.string.negative_button, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(), R.string.toast_negative, Toast.LENGTH_SHORT).show();
        }
    });

    //設(shè)置對話框是可取消的
    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();
}

實(shí)現(xiàn)效果:

這里寫圖片描述

2,showSimpleListDialog():前面的代碼很類似,唯1需要改變的就是將內(nèi)容區(qū)域改成列表項(xiàng):

    private void showSimpleListDialog(View view) {
    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.simple_list_dialog);

    /**
     * 設(shè)置內(nèi)容區(qū)域?yàn)楹唵瘟斜眄?xiàng)
     */
    final String[] Items={"Items_one","Items_two","Items_three"};
    builder.setItems(Items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(), "You clicked "+Items[i], Toast.LENGTH_SHORT).show();
        }
    });
    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();
}

實(shí)現(xiàn)效果:

這里寫圖片描述

3,showSingleChoiceDialog():注意setSingleChoiceItems()內(nèi)部各參數(shù)的意義

    private void showSingleChoiceDialog(View view) {
    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.single_choice_dialog);

    /**
     * 設(shè)置內(nèi)容區(qū)域?yàn)閱芜x列表項(xiàng)
     */
    final String[] items={"Items_one","Items_two","Items_three"};
    builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(), "You clicked "+items[i], Toast.LENGTH_SHORT).show();
        }
    });

    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();
}

實(shí)現(xiàn)效果:

這里寫圖片描述

4,showMultiCHoiceDialog():

    private void showMultiChoiceDialog(View view) {
    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.simple_list_dialog);

    /**
     * 設(shè)置內(nèi)容區(qū)域?yàn)槎噙x列表項(xiàng)
     */
    final String[] items={"Items_one","Items_two","Items_three"};
    builder.setMultiChoiceItems(items, new boolean[]{true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i, boolean b) {
            Toast.makeText(getApplicationContext(),"You clicked "+items[i]+" "+b,Toast.LENGTH_SHORT).show();
        }
    });


    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();

}

實(shí)現(xiàn)效果:

這里寫圖片描述

5,showCustomAdapterDialog():

這部份觸及到自定義Adapter,如果對這部份不太了解,也不用灰心,在后面的文章中我會單獨(dú)講授Adapter這部份。在這里我們只需要了解自定義Adapter需要繼承自BaseAdapter,然后需要覆寫其中4個(gè)方法,其中g(shù)etView()方法負(fù)責(zé)顯示,所以我們還需要為它創(chuàng)建1個(gè)布局文件:
layout->custom_adapter.xml

<?xml version="1.0" encoding="utf⑻"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="#dddddd"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="10dp"
android:layout_marginRight="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
    android:id="@+id/id_image"
    android:layout_width="60dp"
    android:layout_height="60dp" />
<TextView
    android:textColor="#554995"
    android:id="@+id/id_text"
    android:layout_marginLeft="20dp"
    android:layout_gravity="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

布局效果:

這里寫圖片描述

然后我們在需要在MainActivity.java中實(shí)現(xiàn)我們自定義的Adapter:

private class CustomAdapter extends BaseAdapter {

    private List<ItemBean> items;
    private LayoutInflater inflater;
    private ImageView image;
    private TextView text;

    public CustomAdapter(List<ItemBean> items, Context context) {
        this.items = items;
        this.inflater = LayoutInflater.from(context);
    }



    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int i) {
        return items.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(view==null){
            view=inflater.inflate(R.layout.custom_adapter,null);
            image= (ImageView) view.findViewById(R.id.id_image);
            text= (TextView) view.findViewById(R.id.id_text);
        }
        image.setImageResource(items.get(i).getImageId());
        text.setText(items.get(i).getMessage());
        return view;
    }
}

我們在這里使用了List items;是由于Adapter中需要1張圖片和String來填充我們剛定義好的layout;所以我們還需要在MainActivity中建立1個(gè)數(shù)據(jù)類:ItemBean:

private class ItemBean{
    private int imageId;
    private String message;

    public ItemBean(int imageId, String message) {
        this.imageId = imageId;
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}


    private void showCustomAdapterDialog(View view){

    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.custom_adapter_dialog);

    /**
     * 設(shè)置內(nèi)容區(qū)域?yàn)樽远xadapter
     */
    List<ItemBean> items=new ArrayList<>();
    items.add(new ItemBean(R.mipmap.icon,"You can call me xiaoming"));
    items.add(new ItemBean(R.mipmap.ic_launcher, "I'm android xiao"));
    CustomAdapter adapter=new CustomAdapter(items,getApplicationContext());
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(),"You clicked"+i,Toast.LENGTH_SHORT).show();
        }
    });

    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();

}

實(shí)現(xiàn)效果:

這里寫圖片描述

6,showCustomViewDialog()
為了實(shí)現(xiàn)自定義View的內(nèi)容區(qū)域,我們首先需要建立1個(gè)布局文件:
layout->custom_view.xml

<?xml version="1.0" encoding="utf⑻"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="#25AE90">
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="60dp"
    android:layout_marginLeft="60dp">
    <TextView
        android:text="用戶名"
        android:layout_marginRight="10dp"
        android:textSize="20sp"
        android:textColor="#ffffff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="40dp"
        android:background="#ffffff"/>
</LinearLayout>
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_marginRight="60dp"
    android:layout_marginLeft="60dp">
    <TextView
        android:text="密    碼"
        android:layout_marginRight="10dp"
        android:textSize="20sp"
        android:textColor="#ffffff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="40dp"
        android:background="#ffffff"/>
</LinearLayout>
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_marginRight="60dp"
    android:layout_marginLeft="60dp">
    <Button
        android:text="登  錄"
        android:textColor="#25AE90"
        android:background="#ECEEF1"
        android:layout_width="0dp"
        android:layout_marginRight="10dp"
        android:layout_weight="1"
        android:layout_height="wrap_content" />
    <Button
        android:text="取  消"
        android:textColor="#25AE90"
        android:background="#ECEEF1"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content" />
</LinearLayout>

布局效果:

這里寫圖片描述

實(shí)現(xiàn)showCustomViewDialog()

    private void showCustomViewDialog(View view){
    builder=new AlertDialog.Builder(this);
    builder.setIcon(R.mipmap.ic_launcher);
    builder.setTitle(R.string.custom_view_dialog);

    /**
     * 設(shè)置內(nèi)容區(qū)域?yàn)樽远xView
     */
    LinearLayout loginDialog= (LinearLayout) getLayoutInflater().inflate(R.layout.custom_view,null);
    builder.setView(loginDialog);

    builder.setCancelable(true);
    AlertDialog dialog=builder.create();
    dialog.show();
}

實(shí)現(xiàn)效果:

這里寫圖片描述


總結(jié):

  • AlertDialog基本用法 :需要掌握AlertDialog的創(chuàng)建進(jìn)程,理解Builder模式;
  • 內(nèi)容區(qū)域 :AlertDialog的難點(diǎn)就在于設(shè)計(jì)適合的內(nèi)容區(qū)域;
  • 自定義布局 :很多時(shí)候我們都需要依照自己的意愿去定制AlertDialog內(nèi)容區(qū)域的顯示情勢,這就需要我們掌握自定義Adapter和自定義View的用法,而這兩部份也是1個(gè)難點(diǎn),要講的話又是另外一個(gè)專題了;

作為文章的結(jié)束;為了檢驗(yàn)我們是不是已掌握了AlertDialog的各種用法,我們可以試著實(shí)現(xiàn)以下微信中的AlertDialog;如果你已掌握了自定義adapter和自定義ListView的話可以試著實(shí)現(xiàn)刪除和置頂ListItem的功能。

    Tips:編寫自定義ListView,監(jiān)聽長按ListItem時(shí)彈出AlertDialog,并且實(shí)現(xiàn)點(diǎn)擊刪除能保證ListView中的Item刪除掉,并且能夠?qū)崿F(xiàn)置頂功能

這里寫圖片描述


  • 微博:@JueYingCoder,
  • 個(gè)人主頁:Coder:程序員&&工科男的平常,
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美俄罗斯一级毛片激情 | 欧美亚洲韩国 | jizz中国zz女人18| 亚洲国产欧美精品一区二区三区 | 桐谷茉莉在线 | 视频在线观看网站免费 | 欧美1卡一卡二卡三新区 | 最新中文字幕在线视频 | 欧美精品99久久久久久人 | 欧美最猛性xxxx高清 | 亚洲成人在线免费观看 | 欧洲免费无线码二区5 | 欧美成人a视频 | 亚洲另类天堂 | 亚洲天堂在线视频观看 | 波多野结衣手机在线视频 | 欧美性淫| 国产精品福利视频手机免费观看 | 24小时中文乱码字幕在线观看 | 亚洲精品国产一区二区 | 99一级毛片 | 欧美一卡二卡3卡4卡无卡免费 | 中文字幕在线不卡精品视频99 | 国产国语一级a毛片高清视频 | 欧美日韩一区二区综合 | 日韩中文字幕精品一区在线 | 亚洲a色 | 精品视频一区二区三区免费 | 999精品视频在线观看 | 国产欧美日韩在线观看一区二区三区 | 国产高清自拍 | 亚洲天堂网址 | 亚洲精品国产精品乱码不97 | 亚洲免费黄色 | 亚洲国产综合精品中文第一区 | 国产性夜夜春夜夜爽 | 日本免费人做人一区在线观看 | 国产福利自产拍在线观看 | 国产精品久久久久久久久久久久 | 国产精品v欧美精品v日本精 | 午夜久久久久久亚洲国产精品 |