日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

一篇好文之Android文本软键盘全解

發(fā)布時(shí)間:2023/12/14 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇好文之Android文本软键盘全解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

已經(jīng)有一個(gè)多月沒有寫文章了,當(dāng)然,我沒失蹤,我還活著!因?yàn)閾Q了新的工作環(huán)境,所以在接手項(xiàng)目的時(shí)候花了點(diǎn)時(shí)間……不為自己做過多借口,今后持續(xù)更新好內(nèi)容(還是希望自己能周更)!
這篇文章最初是記錄一個(gè)全屏模式下輸入框被軟鍵盤覆蓋的問題,要求背景不動(dòng),輸入框上移!碰巧之后項(xiàng)目發(fā)版,有一點(diǎn)時(shí)間,就想著能不能將Android文本使用做一個(gè)總結(jié)!結(jié)合之前自己做的一些筆記,這篇文章就順利產(chǎn)出了!
其實(shí)換工作之后,我更希望能產(chǎn)出高質(zhì)量的文章,所以我對于這篇文章的期待其實(shí)蠻高的,希望這篇文章能幫助所有開發(fā)者解決在Android開發(fā)過程中遇到的文本問題。當(dāng)然,現(xiàn)在文章記錄的是自己遇到的一些問題(不是很全面),希望各位在Android開發(fā)中遇到各種關(guān)于文本類的問題可以給我留言,我們一起來討論,研究對應(yīng)的解決方案,完善這篇文章及項(xiàng)目!

大家在學(xué)習(xí)使用Android文本軟鍵盤內(nèi)容的時(shí)候遇到什么問題,歡迎在我的公眾號(hào)aserbao給我留言,無償服務(wù)!同時(shí),歡迎大家來加入微信群二維碼討論群,一起討論Android開發(fā)技術(shù)!群二維碼定時(shí)在我公眾號(hào)更新!


文章目錄

  • 項(xiàng)目效果
  • TextView的基本使用
    • TextView的基本屬性
    • 圖文混排的三種實(shí)現(xiàn)方式
      • 1. drawableTop,DrawableBottom,DrawableLeft,drawableRight
      • 2. 通過ImageSpan或者DynamicDrawableSpan實(shí)現(xiàn)
      • 3. 通過給TextView設(shè)置Html內(nèi)容
  • EditText的基本使用
    • 1. EditText的基本屬性
      • 1. imeOption屬性
      • 2. inputType屬性
      • 2. 監(jiān)聽軟鍵盤右下角按鍵
      • 3. 設(shè)置imeOption不生效的解決辦法
    • 2. 修改EditText下劃線的顏色
    • 3. 控制輸入框最多輸入20個(gè)字符(10個(gè)漢字,20個(gè)英文字符)
      • 1. 通過TextWatcher來監(jiān)聽輸入字符串內(nèi)容進(jìn)行過濾
      • 2. 通過實(shí)現(xiàn)InputFileter來過濾,中文算兩個(gè)字符,英文算一個(gè)
    • 4. 判斷軟鍵盤輸入的是否有表情
  • 軟鍵盤全解
    • Activity的SoftInputMethod參數(shù)講解
    • 軟鍵盤的隱藏,顯示,及判斷是否顯示工具類
    • 軟鍵盤彈出監(jiān)聽及高度獲取
    • 軟鍵盤常見問題
      • 非全屏模式下軟鍵盤覆蓋輸入框,做背景不動(dòng),軟鍵盤上移效果
      • 全屏模式下軟鍵盤覆蓋輸入框的問題,做背景不動(dòng),軟鍵盤上移效果
        • 1. 第一種思路:獲取軟鍵盤高度后修改父布局的高度
          • 思路介紹圖
          • 代碼實(shí)現(xiàn)
        • 2. 第二種思路:通過添加占位圖的方式將輸入框上移
          • 思路介紹圖
          • 代碼
  • 項(xiàng)目地址
  • 總結(jié)

項(xiàng)目效果

TextView的基本使用

TextView的基本屬性

常用的屬性:

<TextViewandroid:text="@string/long_text"android:textSize="10sp"android:textColor="@color/black"android:shadowRadius="8"android:shadowColor="@color/black70"android:shadowDy="4"android:layout_width="wrap_content"android:layout_height="wrap_content" />

下面這些基本包含TextView的所有屬性,里面很多屬性大多數(shù)情況下我們都使用不到,可以稍微了解下,可以直接跳過屬性列表!

屬性作用
android:text設(shè)置顯示文本.
android:textAppearance設(shè)置文字外觀
android:textColor設(shè)置文本顏色
android:textColorHighlight被選中文字的底色,默認(rèn)為藍(lán)色
android:textColorHint設(shè)置提示信息文字的顏色,默認(rèn)為灰色。與hint一起使用。
android:textColorLink文字鏈接的顏色.
android:textScaleX設(shè)置文字之間間隔,默認(rèn)為1.0f。
android:textSize設(shè)置文字大小,推薦度量單位”sp”,如”15sp”
android:textStyle設(shè)置字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設(shè)置一個(gè)或多個(gè),用“|”隔開
android:typeface設(shè)置文本字體
android:height設(shè)置文本區(qū)域的高度,支持度量單位:px(像素)/dp/sp/in/mm(毫米)
android:maxHeight設(shè)置文本區(qū)域的最大高度
android:minHeight設(shè)置文本區(qū)域的最小高度
android:width設(shè)置文本區(qū)域的寬度,支持度量單位:px(像素)/dp/sp/in/mm(毫米),與layout_width 的區(qū)別看這里。
android:shadowColor指定文本陰影的顏色,需要與shadowRadius一起使用。
android:shadowDx設(shè)置陰影橫向坐標(biāo)開始位置。
android:shadowDy設(shè)置陰影縱向坐標(biāo)開始位置。
android:shadowRadius設(shè)置陰影的半徑。一般設(shè)置為5.0的效果比較好。
android:singleLine設(shè)置單行顯示。如果和layout_width一起使用,當(dāng)文本不能全部顯示時(shí),后面用“…”來表示。如android:text=”test_ singleLine “
android:singleLine=”true” android:layout_width=”20dp”將只顯示“t…”。如果不設(shè)置singleLine或者設(shè)置為false,文本將自動(dòng)換行
android:cursorVisible設(shè)定光標(biāo)為顯示/隱藏,默認(rèn)顯示。
android:digits設(shè)置允許輸入哪些字符。如“1234567890.±*/% ()”
android:drawableTop\Bottom\Left\Right在text的上、下、左、右方輸出一個(gè)drawable
android:drawablePadding設(shè)置text與drawable(圖片)的間隔
android:editable設(shè)置是否可編輯。
android:editorExtras設(shè)置文本的額外的輸入數(shù)據(jù)。
android:ellipsize設(shè)置當(dāng)文字過長時(shí),該控件該如何顯示。有如下值設(shè)置:”start”—-省略號(hào)顯示在開頭;”end” ——省略號(hào)顯示在結(jié)尾;”middle”—-省略號(hào)顯示在中間;”marquee” ——以跑馬燈的方式顯示(動(dòng)畫橫向移動(dòng))
android:freezesText設(shè)置保存文本的內(nèi)容以及光標(biāo)的位置。
android:gravity設(shè)置文本位置,設(shè)置成“center”,文本將居中顯示。
android:hintText為空時(shí)顯示的文字提示信息,可通過textColorHint設(shè)置提示信息的顏色。此屬性在 EditView中使用,但是這里也可以用。
android:imeOptions附加功能,設(shè)置右下角IME動(dòng)作與編輯框相關(guān)的動(dòng)作,如actionDone右下角將顯示一個(gè)“完成”,而不設(shè)置默認(rèn)是一個(gè)回車符號(hào)。這個(gè)在EditView中再詳細(xì)說明,此處無用。
android:imeActionId設(shè)置IME動(dòng)作ID
android:imeActionLabel設(shè)置IME動(dòng)作標(biāo)簽
android:includeFontPadding設(shè)置文本是否包含頂部和底部額外空白,默認(rèn)為true。
android:inputMethod為文本指定輸入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin
android:inputType設(shè)置文本的類型,用于幫助輸入法顯示合適的鍵盤類型。在EditView中再詳細(xì)說明,這里無效果。
android:linksClickable設(shè)置鏈接是否點(diǎn)擊連接,即使設(shè)置了autoLink。
android:marqueeRepeatLimit在ellipsize指定marquee的情況下,設(shè)置重復(fù)滾動(dòng)的次數(shù),當(dāng)設(shè)置marquee_forever時(shí)表示無限次。
android:ems設(shè)置TextView的寬度為N個(gè)字符的寬度。這里測試為一個(gè)漢字字符寬度
android:maxEms設(shè)置TextView的寬度為最長為N個(gè)字符的寬度。與ems同時(shí)使用時(shí)覆蓋ems選項(xiàng)。
android:minEms設(shè)置TextView的寬度為最短為N個(gè)字符的寬度。與ems同時(shí)使用時(shí)覆蓋ems選項(xiàng)。
android:maxLength限制顯示的文本長度,超出部分不顯示。
android:lines設(shè)置文本的行數(shù),設(shè)置兩行就顯示兩行,即使第二行沒有數(shù)據(jù)。
android:maxLines設(shè)置文本的最大顯示行數(shù),與width或者layout_width結(jié)合使用,超出部分自動(dòng)換行,超出行數(shù)將不顯示。
android:minLines設(shè)置文本的最小行數(shù),與lines類似。
android:lineSpacingExtra設(shè)置行間距。
android:lineSpacingMultiplier設(shè)置行間距的倍數(shù)。如”1.2”
android:numeric如果被設(shè)置,該TextView有一個(gè)數(shù)字輸入法。此處無用,設(shè)置后唯一效果是TextView有點(diǎn)擊效果,此屬性在EdtiView將詳細(xì)說明。
android:password以小點(diǎn)”*”顯示文本
android:phoneNumber設(shè)置為電話號(hào)碼的輸入方式。
android:privateImeOptions設(shè)置輸入法選項(xiàng),此處無用,在EditText將進(jìn)一步討論。
android:scrollHorizontally設(shè)置文本超出TextView的寬度的情況下,是否出現(xiàn)橫拉條。
android:selectAllOnFocus如果文本是可選擇的,讓他獲取焦點(diǎn)而不是將光標(biāo)移動(dòng)為文本的開始位置或者末尾位置。 需要再EditText中設(shè)置。
android:maxWidth設(shè)置文本區(qū)域的最大寬度
android:minWidth設(shè)置文本區(qū)域的最小寬度

圖文混排的三種實(shí)現(xiàn)方式

1. drawableTop,DrawableBottom,DrawableLeft,drawableRight

<TextViewandroid:id="@+id/one_pictxt_tv"android:drawableLeft="@drawable/emoji_00"android:drawableRight="@drawable/emoji_01"android:drawableBottom="@drawable/emoji_02"android:drawableTop="@drawable/emoji_03"android:text="第一種方式:\n通過drawableLeft來實(shí)現(xiàn)\n上下左右中間文字"style="@style/picTxt_tv_style"/>

2. 通過ImageSpan或者DynamicDrawableSpan實(shí)現(xiàn)

SpannableString dynamicDrawableSpan = new SpannableString("DynamicDrawableSpan");DynamicDrawableSpan drawableSpan =new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {@Overridepublic Drawable getDrawable() {Drawable d = getResources().getDrawable(R.drawable.emoji_00);d.setBounds(0, 0, 150, 150);return d;}};DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) {@Overridepublic Drawable getDrawable() {Drawable d = getResources().getDrawable(R.drawable.emoji_01);d.setBounds(0, 0, 150, 150);return d;}};dynamicDrawableSpan.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);dynamicDrawableSpan.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);mDynamicDrawableSpanTv.setText(dynamicDrawableSpan);SpannableString imageSpan = new SpannableString("ImageSpan");Drawable d = getResources().getDrawable(R.drawable.emoji_02);d.setBounds(0, 0, 150, 150);imageSpan.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);mIamgeSpanTv.setText(imageSpan);

3. 通過給TextView設(shè)置Html內(nèi)容

如果要包含圖片的話需要重寫一個(gè)類實(shí)現(xiàn)ImageGetter接口并重寫getDrawable方法,具體實(shí)現(xiàn)可以下載底部項(xiàng)目源碼!

mThreePictxtTv.setText(Html.fromHtml("點(diǎn)擊我,帶你到HtmlTextActivity中去<font color= '#ff0000'>textView通過Html實(shí)現(xiàn)圖文混排</font> 點(diǎn)擊這一段"));

帶圖片的html的設(shè)置:

String g = "<html>" +"<head>" + "</head>" +"<body style=\"text-align: justify\">" + "\t<h3>Android性能優(yōu)化之APK瘦身詳解(瘦身73%)</h3>" +"\t<P>公司項(xiàng)目在不斷的改版迭代中,代碼在不斷的累加,終于apk包不負(fù)重負(fù)了,已經(jīng)到了八十多M了。可能要換種方式表達(dá),到目前為止沒有正真的往外推過,一直在內(nèi)部執(zhí)行7天討論需求,5天代碼實(shí)現(xiàn)的階段。你在寫上個(gè)版本的內(nèi)容,好了,下個(gè)版本的更新內(nèi)容已經(jīng)定稿了。基于這種快速開發(fā)的現(xiàn)狀,我們app優(yōu)化前已經(jīng)有87.1M了,包大了,運(yùn)營說這樣轉(zhuǎn)化不高,只能好好搞一下咯。優(yōu)化過后包大小為23.1M(優(yōu)化了73%,不要說我標(biāo)題黨)。好了好了,我要闡述我的apk超級無敵魔鬼瘦身之心得了。</p>" +"" +"\t<img src=\"imgs/0.png\" style=\"width: 100%;\" />" + "" + "</body>" +"</html>";mHtmlTv.setText(Html.fromHtml(htmlContent, new MImageGetter(mHtmlTv,HtmlTextActivity.this),null));public class MImageGetter implements ImageGetter {Context c;public MImageGetter(TextView text, Context c) {this.c = c;}public Drawable getDrawable(String source) {Drawable drawable = null;InputStream is = null;try {is = c.getResources().getAssets().open(source);} catch (IOException e1) {e1.printStackTrace();}try {TypedValue typedValue = new TypedValue();typedValue.density = TypedValue.DENSITY_DEFAULT;drawable = Drawable.createFromResourceStream(null, typedValue, is, "src");DisplayMetrics dm = c.getResources().getDisplayMetrics();int dwidth = dm.widthPixels-10;//padding left + padding right float dheight = (float)drawable.getIntrinsicHeight()*(float)dwidth/(float)drawable.getIntrinsicWidth();int dh = (int)(dheight+0.5);int wid = dwidth;int hei = dh;drawable.setBounds(0, 0, wid, hei);return drawable;} catch (Exception e) {System.out.println(e);return null;} } }

EditText的基本使用

1. EditText的基本屬性

<EditTextandroid:textIsSelectable="true" //文本是否可選,復(fù)制粘貼剪輯,在TextVew中使用,在EditText中使用此屬性將收不到軟鍵盤輸入內(nèi)容android:id="@+id/pop_select_label_et"android:layout_weight="1"android:paddingLeft="25dp"android:background="@drawable/find_num_tv_bg"//@null 取消下劃線android:hint="輸入話題"android:maxLength="30"android:textColorHint="@color/white"android:textColor="@color/white"android:singleLine="true"android:imeOptions="actionSearch"//軟鍵盤右下方修改為搜索android:layout_width="0dp"android:textCursorDrawable="@drawable/text_view_cursor" //修改光標(biāo)的顏色android:textSize="15sp"android:cursorVisible="false"//是否顯示光標(biāo)android:focusable="true"//是否可以focuandroid:layout_height="match_parent"/>

1. imeOption屬性

imeOptions:值:

  • actionDone:完成,對應(yīng)常量EditorInfo.IME_ACTION_DONE
  • actionSend :發(fā)送,對應(yīng)常量EditorInfo.IME_ACTION_SEND
  • actionSearch 搜索,對應(yīng)常量EditorInfo.IME_ACTION_SEARCH
  • actionGo 去往,對應(yīng)常量EditorInfo.IME_ACTION_GO
  • actionNone 沒有動(dòng)作,對應(yīng)常量EditorInfo.IME_ACTION_NONE
  • actionUnspecified 未指定,默認(rèn),對應(yīng)常量EditorInfo.IME_ACTION_UNSPECIFIED.
  • actionNext 下一個(gè),對應(yīng)常量EditorInfo.IME_ACTION_NEXT

2. inputType屬性

android:inputType="phone" //電話號(hào)碼android:inputType="none" //文本類型,多為大寫、小寫和數(shù)字符號(hào)。 android:inputType="text" android:inputType="textCapCharacters" //字母大寫 android:inputType="textCapWords" //首字母大寫 android:inputType="textCapSentences" //僅第一個(gè)字母大寫 android:inputType="textAutoCorrect" //自動(dòng)完成 android:inputType="textAutoComplete" //自動(dòng)完成 android:inputType="textMultiLine" //多行輸入 android:inputType="textImeMultiLine" //輸入法多行(如果支持) android:inputType="textNoSuggestions" //不提示 android:inputType="textUri" //網(wǎng)址 android:inputType="textEmailAddress" //電子郵件地址 android:inputType="textEmailSubject" //郵件主題 android:inputType="textShortMessage" //短訊 android:inputType="textLongMessage" //長信息 android:inputType="textPersonName" //人名 android:inputType="textPostalAddress" //地址android:inputType="textPassword" //密碼 android:inputType="textVisiblePassword" //可見密碼android:inputType="textWebEditText" //作為網(wǎng)頁表單的文本 android:inputType="textFilter" //文本篩選過濾 android:inputType="textPhonetic" //拼音輸入 //數(shù)值類型 android:inputType="number" //數(shù)字 android:inputType="numberSigned" //帶符號(hào)數(shù)字格式 android:inputType="numberDecimal" //帶小數(shù)點(diǎn)的浮點(diǎn)格式 android:inputType="datetime" //時(shí)間日期 android:inputType="date" //日期鍵盤 android:inputType="time" //時(shí)間鍵盤

2. 監(jiān)聽軟鍵盤右下角按鍵

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {switch (actionId){case EditorInfo.IME_ACTION_SEARCH:break;case EditorInfo.IME_ACTION_DONE:break;case EditorInfo.IME_ACTION_SEND:break;case EditorInfo.IME_ACTION_GO:break;case EditorInfo.IME_ACTION_NONE:break;case EditorInfo.IME_ACTION_NEXT:break;case EditorInfo.IME_ACTION_UNSPECIFIED:break;}return false;}});

3. 設(shè)置imeOption不生效的解決辦法

設(shè)置imeOption無效:需要將singleLine設(shè)置為true或者 將inputType設(shè)置為text

2. 修改EditText下劃線的顏色

//1. 通過修改colorAccent屬性來修改下劃線顏色,此方法會(huì)全局修改<item name="colorAccent">@color/colorWhite80</item>//2. 通過修改EditText的style來修改下劃線顏色 <style name="MyEditText2" parent="Theme.AppCompat.Light"><item name="colorControlNormal">@color/colorWhite80</item> //控件默認(rèn)的顏色<item name="colorControlActivated">@color/colorWhite50</item> // 控件被激活的顏色 </style>

3. 控制輸入框最多輸入20個(gè)字符(10個(gè)漢字,20個(gè)英文字符)

Android原生計(jì)算方法沒有漢字和英文字符的區(qū)分,所以當(dāng)產(chǎn)品有這個(gè)需求的時(shí)候,只能通過過濾計(jì)算去限制輸入!這里提供兩種方案:

1. 通過TextWatcher來監(jiān)聽輸入字符串內(nèi)容進(jìn)行過濾

editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {int charSequenceCount = countChineseChar(s);if (s.length() + charSequenceCount > StaticFinalValues.MAX_CHAR_NUM_SELECT) {CharSequence text = s.subSequence(0, s.length() - 1);editText.setText(text);editText.setSelection(text.length());//光標(biāo)跳最后if(System.currentTimeMillis() - mLastTime > 500) {Toast.makeText(mContext, "輸入不能多于" + String.valueOf( StaticFinalValues.MAX_CHAR_NUM_SELECT) +"字符", Toast.LENGTH_SHORT).show();mLastTime = System.currentTimeMillis();}return;}}});/*** 計(jì)算中文字符** @param sequence* @return*/public static int countChineseChar(CharSequence sequence) {if (TextUtils.isEmpty(sequence)) {return 0;}int charNum = 0;for (int i = 0; i < sequence.length(); i++) {char word = sequence.charAt(i);if (UiUtils.isChineseChar(word)) {//中文charNum++;}}return charNum;}/*** 判斷是否是中文* @param c* @return*/public static boolean isChineseChar(char c) {Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {return true;}return false;}

2. 通過實(shí)現(xiàn)InputFileter來過濾,中文算兩個(gè)字符,英文算一個(gè)

public class MaxLengthEditText extends AppCompatEditText {public MaxLengthEditText(Context context, AttributeSet attrs) {super(context, attrs);initLength(attrs,context);}public MaxLengthEditText(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initLength(attrs,context);}private void initLength(AttributeSet a, Context context) {//命名空間(別告訴我不熟悉)String namespace = "http://schemas.android.com/apk/res/android";//獲取屬性中設(shè)置的最大長度int maxLength = a.getAttributeIntValue(namespace, "maxLength", -1);//如果設(shè)置了最大長度,給出相應(yīng)的處理if (maxLength > -1) {setFilters(new InputFilter[]{new MaxLengthEditText.MyLengthFilter(maxLength,context)});}}/*** 從源碼中復(fù)制出來的* 來源:InputFilter.LengthFilter* 這里只是添加了一句話:* Toast.makeText(context, "字?jǐn)?shù)不能超過" + mMax, Toast.LENGTH_SHORT).show();** This filter will constrain edits not to make the length of the text* greater than the specified length.*/class MyLengthFilter implements InputFilter {private final int mMax;private Context context;public MyLengthFilter(int max, Context context) {mMax = max;this.context = context;}public CharSequence filter(CharSequence source, int start, int end, Spanned dest,int dstart, int dend) {int keep = 0;for (int i = 0; i < dest.length(); i++) {char charAt = dest.charAt(i);//32-122包含了空格,大小寫字母,數(shù)字和一些常用的符號(hào),//如果在這個(gè)范圍內(nèi)則算一個(gè)字符,//如果不在這個(gè)范圍比如是漢字的話就是兩個(gè)字符if (charAt >= 32 && charAt <= 122) {keep++;} else {keep += 2;}}if(keep <= mMax){return source.subSequence(start, source.length());}else{Toast.makeText(mContext, "輸入少一點(diǎn),太多了", Toast.LENGTH_SHORT).show();return "";}}/*** @return the maximum length enforced by this input filter*/public int getMax() {return mMax;}} }

4. 判斷軟鍵盤輸入的是否有表情

若需求聲明,表情只能算一個(gè)字符,這時(shí)候就需要在輸入后進(jìn)行判斷:

@Overridepublic void afterTextChanged(Editable s) {String s1 = s.toString();char[] sC = new char[s1.length()];s1.getChars(0,s1.length(),sC,0);for (char c : sC) {Log.e(TAG, "afterTextChanged: "+ isEmojiCharacter(c));}}private static boolean isEmojiCharacter(char codePoint) {return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD) || ((codePoint >= 0x20) && codePoint <= 0xD7FF))|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));}

軟鍵盤全解

Activity的SoftInputMethod參數(shù)講解

屬性作用
stateUnspecified未指定狀態(tài),系統(tǒng)默認(rèn)采用的交互方式,默認(rèn)不彈出軟鍵盤,但是對于輸入框界面有滾動(dòng)布局時(shí)且EditText獲得焦點(diǎn)時(shí),軟鍵盤彈出
stateUnchanged狀態(tài)不改變 ,當(dāng)前界面的軟鍵盤是否顯示,取決于上一個(gè)Activity軟鍵盤的狀態(tài)
stateHidden軟鍵盤一定是隱藏
stateAlwaysHidden軟鍵盤一定是隱藏,暫時(shí)沒發(fā)現(xiàn)和stateHidden有啥區(qū)別
stateVisible設(shè)置為這個(gè)屬性,可以將軟鍵盤召喚出來,即使在界面上沒有輸入框的情況下也可以強(qiáng)制召喚出來
stateAlwaysVisible軟鍵盤默認(rèn)顯示,當(dāng)給AActivity設(shè)置stateVisible屬性時(shí),從當(dāng)前AActivity跳轉(zhuǎn)到BActivity,軟鍵盤隱藏,再從BActivity返回AActivity,軟鍵盤不顯示!當(dāng)設(shè)置stateAlwaysVisible屬性時(shí),跳轉(zhuǎn)后的返回軟鍵盤依舊顯示!
adjustUnspecified系統(tǒng)默認(rèn)屬性,默認(rèn)adjustPan的效果!如果在設(shè)置這個(gè)屬性之前設(shè)置過adjustResize,則會(huì)是adjustResize的效果!如果上一次設(shè)置為adjustPan,再設(shè)置為adjustUnspecified,則會(huì)是adjustPan的效果!
adjustResize設(shè)置這個(gè)屬性,當(dāng)前Activity總會(huì)給軟鍵盤預(yù)留顯示空間,輸入框被彈出軟鍵盤覆蓋掉,有兩種情況:1. 有滾動(dòng)布局,其他布局不移動(dòng)且大小不改變,輸入框移動(dòng)到軟鍵盤上面 2. 無滾動(dòng)布局,通過修改其他布局的大小達(dá)到輸入框移動(dòng)到軟鍵盤的效果
adjustPan設(shè)置這個(gè)屬性,Activity不會(huì)預(yù)留軟鍵盤顯示空間,而是通過布局移動(dòng)來保證輸入框不被軟鍵盤覆蓋!只要輸入框被軟鍵盤覆蓋,就會(huì)通過移動(dòng)整個(gè)布局來達(dá)到顯示輸入框的效果!
注意當(dāng)Activity設(shè)置全屏后,adjustResize和adjustPan沒有任何區(qū)別!無論是否有滾動(dòng)布局,Activity都會(huì)往上移動(dòng)

軟鍵盤的隱藏,顯示,及判斷是否顯示工具類

public class AppKeyBoardMgr {/*** 打開軟鍵盤* @param mEditText 輸入框* @param mContext 上下文*/public static void openKeybord(EditText mEditText, Context mContext){InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);}/*** 顯示輸入法* @param mAct activity*/public static void showInputMethod(final Activity mAct) {View v = mAct.getCurrentFocus();if (null == v) {return;}((InputMethodManager) mAct.getSystemService(Activity.INPUT_METHOD_SERVICE)).showSoftInput(v, 0);}/*** 強(qiáng)制顯示輸入法鍵盤*/public static void showKeybord(EditText edittext) {InputMethodManager inputMethodManager = (InputMethodManager)edittext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_FORCED);}/*** 關(guān)閉軟鍵盤* @param mEditText 輸入框* @param mContext 上下文*/public static void closeKeybord(EditText mEditText, Context mContext){InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);}/*** 強(qiáng)制隱藏輸入法鍵盤*/public static void hideKeybord(EditText edittext) {InputMethodManager inputMethodManager = (InputMethodManager)edittext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);if (inputMethodManager.isActive()) {inputMethodManager.hideSoftInputFromWindow(edittext.getWindowToken(), 0);}}/*** 隱藏輸入法* @param mAct activity*/public static void hideInputMethod(Activity mAct) {try {// hide keybord anywayView v = mAct.getWindow().getCurrentFocus();if (v != null) {InputMethodManager imm = (InputMethodManager) mAct.getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(v.getWindowToken(), 0);}} catch (Exception e) {}}/*** 通過定時(shí)器強(qiáng)制隱藏虛擬鍵盤*/public static void TimerHideKeyboard(final View v) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);if (imm.isActive()) {imm.hideSoftInputFromWindow(v.getApplicationWindowToken(),0);}}}, 10);}/*** 切換軟鍵盤的狀態(tài)* 如當(dāng)前為收起變?yōu)閺棾?若當(dāng)前為彈出變?yōu)槭掌?/public static void toggleKeybord(EditText edittext) {InputMethodManager inputMethodManager = (InputMethodManager)edittext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);}/*** 輸入法是否顯示*/public static boolean isKeybord(EditText edittext) {boolean bool = false;InputMethodManager inputMethodManager = (InputMethodManager)edittext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);if (inputMethodManager.isActive()) {bool = true;}return bool;} }

軟鍵盤彈出監(jiān)聽及高度獲取

Android系統(tǒng)沒有對軟鍵盤做特別的開放監(jiān)聽接口,一般情況下我們可以通過布局的addOnGlobalLayoutListener接口來獲取軟鍵盤是否顯示的監(jiān)聽!
提別提醒:如果設(shè)置了屬性adjustNothing,布局沒有任何改變,addOnGlobalLayoutListener這個(gè)監(jiān)聽是不會(huì)有回調(diào)的!

特別說明:下面計(jì)算軟鍵盤高度通過兩種方式來獲取,為了兼容,這里采用兩種方式取最小值來獲取軟鍵盤高度,一種是通過反射系統(tǒng)方法getInputMethodWindowVisibleHeight()方法來獲取軟鍵盤高度,一種通過計(jì)算布局顯示高度來確認(rèn)軟鍵盤高度!

//拿到當(dāng)前XML文件的根布局mChildContent = (FrameLayout) findViewById(android.R.id.content);//監(jiān)聽當(dāng)前View的狀態(tài),進(jìn)行通知回調(diào),即"軟鍵盤彈出""View childew = mChildContent.getChildAt(0);childew.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {//反射獲取InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);int injectSoftHeight = 0;try {Method method = inputMethodManager.getClass().getDeclaredMethod("getInputMethodWindowVisibleHeight", null);method.setAccessible(true);injectSoftHeight = (Integer) method.invoke(inputMethodManager, null);} catch (Exception e) {e.printStackTrace();}//布局顯示高度差來計(jì)算View decorView = getWindow().getDecorView();Rect r = new Rect();//r will be populated with the coordinates of your view that area still visible.decorView.getWindowVisibleDisplayFrame(r);int rootHeight = decorView.getRootView().getHeight();int rH = r.bottom - r.top;int measureDVHeight = rootHeight - rH;if (injectSoftHeight > 200) {mMeasureSoftKBHeight = injectSoftHeight < measureDVHeight ? injectSoftHeight : measureDVHeight;} else if (injectSoftHeight <= 200) {mMeasureSoftKBHeight = measureDVHeight;}if (mLastHeight != mMeasureSoftKBHeight) {if (mMeasureSoftKBHeight > 200) {//200這個(gè)值視情況而定,目前設(shè)置這個(gè)值沒有出現(xiàn)兼容問題//軟鍵盤顯示} else {//軟鍵盤隱藏}mLastHeight = mMeasureSoftKBHeight;}}});

軟鍵盤常見問題

非全屏模式下軟鍵盤覆蓋輸入框,做背景不動(dòng),軟鍵盤上移效果

這種情況,直接通過設(shè)置帶滾動(dòng)布局,設(shè)置adjustResize屬性就可以實(shí)現(xiàn)效果

全屏模式下軟鍵盤覆蓋輸入框的問題,做背景不動(dòng),軟鍵盤上移效果

1. 第一種思路:獲取軟鍵盤高度后修改父布局的高度

思路介紹圖

思路參考于:AndroidBug5497Workaround

代碼實(shí)現(xiàn)
//思路參考于:AndroidBug5497Workaround public class AndroidSoftBoardAdjustHeightUtil {public static void assistActivity(Activity activity) {new AndroidSoftBoardAdjustHeightUtil(activity); } private View mChildOfContent;private int usableHeightPrevious; private FrameLayout.LayoutParams frameLayoutParams;private AndroidSoftBoardAdjustHeightUtil(Activity activity) {FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);mChildOfContent = content.getChildAt(0); mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() { possiblyResizeChildOfContent(); } }); frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams(); } private void possiblyResizeChildOfContent() { int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) { int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); int heightDifference = usableHeightSansKeyboard - usableHeightNow; //排除其他View引起的變化,專注軟鍵盤變化 if (heightDifference > (usableHeightSansKeyboard / 4)) { // keyboard probably just became visible frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; //減掉軟鍵盤的高度} else { // keyboard probably just became hidden frameLayoutParams.height = usableHeightSansKeyboard; } mChildOfContent.requestLayout(); usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect();//這行代碼能夠獲取到去除標(biāo)題欄和被軟鍵盤擋住的部分,所剩下的矩形區(qū)域 mChildOfContent.getWindowVisibleDisplayFrame(r); //r.top : 標(biāo)題欄的高度 //屏幕高度-r.bottom : 軟鍵盤的高度 //可用高度(全屏模式) : rect.bottom //可用高度(非全屏模式) : rect.bottom - rect.top return (r.bottom - r.top);// 全屏模式下: return r.bottom } }

2. 第二種思路:通過添加占位圖的方式將輸入框上移

思路介紹圖

由于第一種方式會(huì)有兼容問題,而且軟鍵盤彈出的時(shí)候部分手機(jī)會(huì)出現(xiàn)閃爍現(xiàn)象!

  • 通過設(shè)置下圖中的PlaceholderView的Visible和Gone來控制EditText的高度
  • 代碼
  • 在輸入框onTouch事件的時(shí)候?qū)⒄嘉灰晥D顯示出來,防止閃爍問題
  • 在監(jiān)聽到軟鍵盤彈出之后,通過視圖的偏移高度和反射調(diào)用getInputMethodWindowVisibleHeight獲取軟鍵盤高度取最小值!(為了適配手機(jī)虛擬鍵盤高度計(jì)算,本人自測,任何一種方式都不能兼容到所有手機(jī),最終通過取兩種計(jì)算結(jié)果下的最小值來解決這個(gè)問題!)
  • private void initCheckKeyBoardIsShow(final EditText editText) {editText.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {editText.setCursorVisible(true);mPlaceholderTv.setVisibility(View.VISIBLE);return false;}});//拿到當(dāng)前XML文件的根布局mChildContent = (FrameLayout) findViewById(android.R.id.content);//監(jiān)聽當(dāng)前View的狀態(tài),進(jìn)行通知回調(diào),即"軟鍵盤彈出""View childew = mChildContent.getChildAt(0);childew.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);int injectSoftHeight = 0;try {Method method = inputMethodManager.getClass().getDeclaredMethod("getInputMethodWindowVisibleHeight", null);method.setAccessible(true);injectSoftHeight = (Integer) method.invoke(inputMethodManager, null);} catch (Exception e) {e.printStackTrace();}View decorView = getWindow().getDecorView();Rect r = new Rect();decorView.getWindowVisibleDisplayFrame(r);int rootHeight = decorView.getRootView().getHeight();int rH = r.bottom - r.top;int measureDVHeight = rootHeight - rH;if (injectSoftHeight > 200) {mMeasureSoftKBHeight = injectSoftHeight < measureDVHeight ? injectSoftHeight : measureDVHeight;} else if (injectSoftHeight <= 200) {mMeasureSoftKBHeight = measureDVHeight;}if (mLastHeight != mMeasureSoftKBHeight) {if (mMeasureSoftKBHeight > 200) {LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mPlaceholderTv.getLayoutParams();int result = 0;result = mMeasureSoftKBHeight;layoutParams.height = result;mPlaceholderTv.setLayoutParams(layoutParams);mPlaceholderTv.postInvalidate();setRecordBtnMargain(mMeasureSoftKBHeight);} else {setRecordBtnMargain(0);mNewStoryEt.setCursorVisible(false);mPlaceholderTv.setVisibility(View.GONE);}mLastHeight = mMeasureSoftKBHeight;}}});}

    項(xiàng)目地址

    AserbaosAndroid
    aserbao的個(gè)人Android總結(jié)項(xiàng)目,希望這個(gè)項(xiàng)目能成為最全面的Android開發(fā)學(xué)習(xí)項(xiàng)目,這是個(gè)美好的愿景,項(xiàng)目中還有很多未涉及到的地方,有很多沒有講到的點(diǎn),希望看到這個(gè)項(xiàng)目的朋友,如果你在開發(fā)中遇到什么問題,在這個(gè)項(xiàng)目中沒有找到對應(yīng)的解決辦法,希望你能夠提出來,給我留言或者在項(xiàng)目github地址提issues,我有時(shí)間就會(huì)更新項(xiàng)目沒有涉及到的部分!項(xiàng)目會(huì)一直維護(hù)下去。當(dāng)然,我希望是Aserbao’sAndroid 能為所有Android開發(fā)者提供到幫助!也期望更多Android開發(fā)者能參與進(jìn)來,只要你熟悉Android某一塊,都可以將你的代碼pull上分支供大家學(xué)習(xí)!

    總結(jié)

    這篇文章是新環(huán)境下的第一篇文章,斷斷續(xù)續(xù)就這么過了一周了,當(dāng)時(shí)是關(guān)于軟鍵盤的問題,全屏顯示情況下,軟鍵盤的顯示,背景不移動(dòng)!為什么到現(xiàn)在才發(fā),主要有下面兩方面原因:

  • 希望今后所有的關(guān)于哪一方面的問題都能在一篇文章里面找到!
  • 我希望自己的每篇文章內(nèi)容是有價(jià)值的,無論是對別人還是自己,能夠記錄下一個(gè)系列下自己踩過的所有坑!
  • 這篇文章最后定義為《初級》,意為所有常見開發(fā)中會(huì)遇到的文本問題都會(huì)在這篇文章中同步更新,后面會(huì)有兩篇《中級》《高級》,中級會(huì)講自定義軟鍵盤的內(nèi)容,高級會(huì)分析Andriod軟件軟鍵盤的整體實(shí)現(xiàn)架構(gòu)!目前的思路是這樣的!

    如果你在Android開發(fā)的過程中遇到文本系列的問題在文章中找不到對應(yīng)的解決辦法,可以在文章底部或者我的公眾號(hào)aserbao給我留言!我會(huì)和你一起探討研究問題并持續(xù)更新文章!

    百密難免一疏,文章純手打,若有出錯(cuò)之處,還請各位幫忙指出!若文章內(nèi)容對各位有幫助,幫忙留言點(diǎn)個(gè)贊,給作者一絲鼓勵(lì),謝謝!

    總結(jié)

    以上是生活随笔為你收集整理的一篇好文之Android文本软键盘全解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    久久免费视频在线观看 | 欧美九九视频 | 91精品视屏 | 最近日韩免费视频 | 蜜桃av人人夜夜澡人人爽 | 日本精品视频免费观看 | 日韩大片免费在线观看 | 黄色视屏在线免费观看 | 九九久久影视 | 日韩r级电影在线观看 | 69成人在线 | 天天激情站 | 日日插日日干 | 国产午夜精品一区二区三区在线观看 | 午夜精品成人一区二区三区 | 久久亚洲免费视频 | 婷婷六月天天 | 精品国产一区二区三区久久久 | 中文日韩在线视频 | 久久婷婷激情 | 国产麻豆精品传媒av国产下载 | 精品国产成人av | 国产性xxxx | 亚洲综合色视频 | 欧美va天堂va视频va在线 | 成人精品视频久久久久 | 在线国产91 | 国产精品免费视频观看 | 9在线观看免费高清完整版在线观看明 | 国产高清一区二区 | 日韩午夜电影网 | 992tv在线观看 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品99久久99久久久二8 | 国语久久 | 91cn国产在线 | 久久久精品二区 | 最近免费在线观看 | 少妇搡bbb | 日韩精品一区二区三区第95 | 深爱五月激情五月 | 不卡国产视频 | 久久久国产精华液 | 精品一二三区视频 | 97人人添人澡人人爽超碰动图 | 国产免费精彩视频 | www黄在线 | 91视频高清完整版 | 国产精品美女网站 | 国产成人精品福利 | 国产 日韩 在线 亚洲 字幕 中文 | 97色综合| 亚洲天堂视频在线 | 久草在线视频首页 | 久久视频精品在线观看 | 亚洲,播放 | 国内精品视频免费 | 精品日韩av| 久久久久免费精品国产小说色大师 | 中文字幕一区二区三区在线观看 | 天天干天天干天天干天天干天天干天天干 | 国产在线播放一区二区三区 | 日本精品一区二区三区在线观看 | 亚洲激情国产精品 | 一区二区三区免费网站 | 国产黄色美女 | 亚洲免费不卡 | 国产欧美精品一区二区三区四区 | 在线观看视频一区二区三区 | 毛片永久免费 | 国内精品久久久久久 | 成人精品亚洲 | 毛片网免费 | 91丝袜美腿 | 又黄又刺激视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 色九九在线 | 国产乱码精品一区二区三区介绍 | a天堂中文在线 | 国产成人精品免费在线观看 | 久久久精品久久日韩一区综合 | 日韩久久电影 | 久久99精品热在线观看 | 免费男女网站 | 久久免费大片 | 蜜臀av网址 | 永久免费精品视频 | 久久久片| 亚洲aⅴ免费在线观看 | 亚洲综合狠狠干 | 91麻豆产精品久久久久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线小视频你懂的 | 亚洲精品网址在线观看 | 亚洲观看黄色网 | 992tv在线观看 | 久久久久久久久爱 | 亚洲精品欧美视频 | 日韩精品久久久久 | 中文字幕在线观看一区 | 九九九九热精品免费视频点播观看 | 欧美日韩国产精品一区二区 | 国产黄色片久久久 | 天天综合婷婷 | 久久成人久久 | 激情av综合| 免费在线黄网 | 婷婷在线免费 | 国产一区免费在线观看 | 国产专区在线视频 | 91精品国产91p65 | 男女免费视频观看 | 国产一区二区三区免费在线观看 | 国产伦理剧 | 99九九热只有国产精品 | 中文字幕久久精品亚洲乱码 | 久久久久伊人 | 国产精品自产拍在线观看网站 | 激情视频在线观看网址 | 精品久久久久一区二区国产 | 免费国产在线观看 | 国产亚洲日 | 色婷婷88av视频一二三区 | 欧美久久九九 | 中文字幕资源网 国产 | 国产日韩精品一区二区三区在线 | 四虎成人免费观看 | 国产精品久久久免费 | 青青河边草手机免费 | 九色琪琪久久综合网天天 | 欧美日韩精品在线观看视频 | 蜜臀av夜夜澡人人爽人人 | 久草在线综合网 | 欧美日韩国产xxx | 成人黄色毛片视频 | 天天摸天天干天天操天天射 | 免费国产在线观看 | 久草成人在线 | 国产极品尤物在线 | 久久你懂的 | av免费看在线 | 久久精品视频网址 | 中文字幕在线观看91 | 狠狠色免费 | 97电影在线 | 精品久久久久久久 | 蜜臀av夜夜澡人人爽人人桃色 | 91亚洲精品久久久蜜桃 | 亚洲免费视频在线观看 | 黄色三级网站在线观看 | 精品国产精品国产偷麻豆 | 国产麻豆视频在线观看 | 草久在线视频 | 一区二区av | www夜夜操| 成人av片免费看 | 丁香婷婷综合激情五月色 | 日本在线观看一区二区 | 91视频中文字幕 | 经典三级一区 | 在线观看免费一级片 | 视频一区久久 | 国产亚洲亚洲 | 在线中文字幕av观看 | 久久视了| 国产在线精品播放 | 探花视频在线观看免费版 | 在线看污网站 | 在线观看国产亚洲 | 操操综合网 | 国产粉嫩在线观看 | 亚洲精品456在线播放乱码 | 日韩免费电影在线观看 | 国产成人在线一区 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 免费视频色 | 99在线精品视频在线观看 | 天天插综合网 | 亚洲乱码国产乱码精品天美传媒 | 国产一区二区在线免费视频 | 97精品视频在线播放 | 久久精品这里都是精品 | 亚洲国产美女精品久久久久∴ | 久久久久久97三级 | 中文字幕成人 | 一区二区网 | 日韩在线观看三区 | 三级av在线播放 | 狠狠的日日 | 免费看国产黄色 | 亚洲做受高潮欧美裸体 | 中文字幕在线观看免费 | 一级电影免费在线观看 | 国产99在线免费 | 天天干,天天射,天天操,天天摸 | 国产又粗又猛又黄又爽视频 | 欧美日韩综合在线观看 | 亚洲精品美女视频 | 国产日韩欧美综合在线 | 91麻豆免费版 | 黄色中文字幕 | 国产淫片 | 亚洲综合在线五月 | 国产精品9999久久久久仙踪林 | 久久久久这里只有精品 | 黄色毛片观看 | 亚洲精品综合一二三区在线观看 | 天堂在线视频中文网 | 国产精品久久99综合免费观看尤物 | 久久综合激情 | 97超碰在线资源 | 国产精品一区二区三区久久久 | 激情小说久久 | 久久久久高清 | 麻豆视频免费看 | 日韩视频在线播放 | 免费黄色特级片 | 中文十次啦 | 国产精品1000 | av中文在线观看 | 国产成人三级在线观看 | 久久黄色a级片 | 国产无遮挡又黄又爽在线观看 | 亚洲人成在线电影 | 成全在线视频免费观看 | 在线免费三级 | 亚洲精品一区二区在线观看 | 成片免费观看视频 | 国产日本高清 | 亚洲欧美综合精品久久成人 | 国产福利在线免费观看 | 久久涩涩网站 | 激情偷乱人伦小说视频在线观看 | 日韩欧美视频一区 | 99热官网| 亚洲免费精彩视频 | 国产精品一区二区av影院萌芽 | 婷婷色5月 | 999国产在线 | 中文字幕黄网 | 三级黄色在线观看 | 在线观看91 | 精品a在线 | 福利视频一区二区 | 亚洲五月婷婷 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 999日韩| 91亚洲精品久久久蜜桃 | 亚洲专区视频在线观看 | 日韩精品一区二区三区中文字幕 | 国产日韩在线播放 | 天天操夜 | 人人看人人爱 | 蜜臀av网址 | 精品1区二区 | 特级片免费看 | 久草网视频在线观看 | 中文字幕精品一区久久久久 | 国产免费片 | 天天鲁一鲁摸一摸爽一爽 | 久久久国产在线视频 | 日本护士三级少妇三级999 | 国产在线a视频 | 99精品黄色片免费大全 | 一区二区三区四区久久 | 日韩免费久久 | 亚洲国产av精品毛片鲁大师 | 在线免费观看涩涩 | 天天艹天天爽 | 97超碰在线免费观看 | 精精国产xxxx视频在线播放 | 国产一区二区综合 | 亚洲精品国产精品乱码不99热 | 天天干com| 人人爽人人爽av | 欧洲一区二区在线观看 | 欧美日韩三级在线观看 | 亚洲精品小视频 | 九九热在线精品 | 久青草影院 | 天天综合网国产 | 久久久免费精品视频 | 天天插天天爱 | www国产亚洲精品久久麻豆 | av一本久道久久波多野结衣 | 久久国产精品免费看 | 99久热在线精品视频 | 最新中文字幕视频 | 97在线观看免费观看高清 | 最新av网址在线 | 欧美淫视频 | 精品亚洲va在线va天堂资源站 | 天天视频色 | 欧洲精品久久久久毛片完整版 | 国产精品不卡一区 | 视频在线99 | 狠狠狠狠狠狠干 | 久久超碰免费 | 成人黄色小视频 | 久久久久激情电影 | 人人dvd| 国产精品视频免费观看 | 亚洲资源视频 | 国产一区视频免费在线观看 | 久久精彩免费视频 | 国产黄在线| 最近中文字幕大全中文字幕免费 | 黄色三级在线 | 婷婷综合久久 | 精品国产片 | 日本中文一区二区 | 国产永久免费 | 中文一区在线 | 国产免费区| 日本mv大片欧洲mv大片 | 成全在线视频免费观看 | 99视频这里有精品 | a视频免费在线观看 | 91高清免费在线观看 | 9色在线视频 | 国产人成一区二区三区影院 | 天天综合久久 | 91精品国产91久久久久福利 | 国产女v资源在线观看 | 久草影视在线 | 狠狠狠狠狠狠干 | 免费在线观看污网站 | 国产永久免费高清在线观看视频 | 999成人免费视频 | 少妇性色午夜淫片aaaze | 免费精品视频在线 | 久久精品99国产精品亚洲最刺激 | 黄色av免费看 | 999久久精品 | av在线免费在线 | 香蕉成人在线视频 | 成人小视频在线观看免费 | 精品国偷自产国产一区 | www免费看 | 亚洲va韩国va欧美va精四季 | 国内精品视频一区二区三区八戒 | 激情九九| 中文在线8资源库 | 成人黄视频 | 国产成人久久精品 | 国内外激情视频 | 久久久人 | 亚洲午夜久久久综合37日本 | 国产高清视频在线播放 | 亚洲免费观看视频 | 欧美精品免费在线 | 黄色片网站免费 | 99精品欧美一区二区三区 | 欧美精品生活片 | 81精品国产乱码久久久久久 | 成人av网站在线播放 | 欧美久久久久久久 | 国产分类视频 | 精品日韩中文字幕 | 西西444www大胆高清图片 | 久久97精品| 日韩欧美在线高清 | 国产麻豆视频网站 | 免费男女羞羞的视频网站中文字幕 | 国产麻豆电影 | 黄色国产精品 | 成人午夜精品 | 国产天天爽 | 在线免费中文字幕 | 天天射天天干天天爽 | 婷婷色网址| 午夜精品一区二区三区在线 | 一二三区视频在线 | 成人在线观看免费 | 免费视频一级片 | 成人永久在线 | 精品亚洲欧美无人区乱码 | 日韩一区精品 | 中文字幕乱码电影 | 日韩在线观看视频在线 | 蜜臀91丨九色丨蝌蚪老版 | 久久国产热视频 | 欧美a在线看| 欧美性色黄 | 色噜噜色噜噜 | 高潮毛片无遮挡高清免费 | 国产精品久久久久久久99 | 久久久久久久福利 | 久久电影国产免费久久电影 | 国产精品地址 | 91毛片视频| www毛片com| 国模精品一区二区三区 | 国产你懂的在线 | 日韩专区在线观看 | 国产精品久久久久久吹潮天美传媒 | 日韩久久视频 | 黄色a大片| 中文字幕乱在线伦视频中文字幕乱码在线 | 麻豆成人小视频 | 亚洲精品白浆高清久久久久久 | 成人午夜剧场在线观看 | 日本免费久久高清视频 | 亚洲天堂自拍视频 | 国产夫妻自拍av | 中文字幕在 | 欧美日韩伦理在线 | 91男人影院 | 一区二区视频在线播放 | 最新中文字幕在线资源 | 国产在线一区观看 | 久久人人爽人人爽 | 奇米影视8888 | 999久久久国产精品 高清av免费观看 | 婷婷四房综合激情五月 | 黄色av电影网 | 在线看国产视频 | 欧美久久久一区二区三区 | 手机在线欧美 | 在线看岛国av | 又黄又爽又色无遮挡免费 | 亚洲视频久久 | 最近更新的中文字幕 | 成人国产精品一区二区 | 中文在线免费一区三区 | 99精品在线免费在线观看 | 在线视频麻豆 | 国产精品久久人 | 亚洲精品视频在线免费 | 摸bbb搡bbb搡bbbb | 婷婷色在线资源 | 日本韩国中文字幕 | 日韩欧美视频一区 | 国产精品 中文在线 | 国产黄色大片 | 黄色片软件网站 | 日韩欧美视频免费观看 | 亚洲精品久久久久久中文传媒 | av亚洲产国偷v产偷v自拍小说 | 久久精品中文字幕免费mv | 又紧又大又爽精品一区二区 | 婷婷综合五月天 | www.com.黄 | 91九色在线观看视频 | 国产成人精品av久久 | 91大神免费视频 | 国产成人一区二区三区在线观看 | 日日弄天天弄美女bbbb | 国产高清无线码2021 | 免费能看的黄色片 | 日韩精品不卡在线观看 | 日韩电影在线观看一区二区 | 欧美夫妻生活视频 | 免费高清在线观看成人 | 日韩理论在线视频 | 在线免费观看的av | 国产精品久久综合 | 91视频免费看 | 97国产精品亚洲精品 | 91av在线免费播放 | 丁香婷婷在线 | 日韩在线视频不卡 | 国产精品午夜在线观看 | 色综合久久久 | 日韩在线视频免费看 | 国产精品av免费 | 天天插天天干 | 综合激情网... | 久久人人爽人人爽人人片av软件 | 伊人天天色 | 99精品国产成人一区二区 | 国产精品久久久精品 | 国产精品日韩欧美一区二区 | 六月色婷| 黄色三级免费观看 | 丁香六月伊人 | 色香天天| 亚洲天堂精品 | 日本视频高清 | 操高跟美女 | 亚洲免费一级电影 | 中文字幕色在线视频 | 波多野结衣电影一区二区三区 | 美女免费视频观看网站 | 一级黄色免费 | 亚洲一本视频 | 日本视频高清 | 超碰97人 | 97超碰在线资源 | 国产精品原创 | 91精品色| 亚洲永久精品一区 | 91香蕉亚洲精品 | 99电影456麻豆 | 97在线观看免费视频 | 免费日p视频 | 99视频国产在线 | 久久精品在线视频 | 99久久精品一区二区成人 | 亚洲精品福利在线观看 | 香蕉97视频观看在线观看 | 狠狠的操狠狠的干 | 日本一区二区三区免费看 | 夜夜高潮夜夜爽国产伦精品 | 在线观看中文字幕网站 | 国产一区在线看 | 91网站在线视频 | 精品国产一区二区久久 | 天天干天天做 | 欧美日韩国产综合一区二区 | 成人午夜片av在线看 | 日韩一区二区免费播放 | 深爱综合网 | 亚洲精品美女久久久久网站 | 91高清视频免费 | 免费成人在线电影 | a黄色片在线观看 | 在线免费看黄网站 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 一区二区三区四区在线免费观看 | 精品伦理一区二区三区 | 婷婷伊人五月天 | 夜色资源站国产www在线视频 | 国产原创在线观看 | 日本99久久| 亚洲最大在线视频 | 91秒拍国产福利一区 | 日韩综合一区二区三区 | 久久精品久久综合 | 在线a人v观看视频 | 国产精品v欧美精品v日韩 | 九九热国产视频 | 日韩综合视频在线观看 | 亚洲视频精品 | 久久免费视频7 | 成人免费观看电影 | 天天草av | 免费在线观看黄网站 | 91视频啊啊啊| 欧美精品在线一区二区 | 亚洲资源在线观看 | 亚洲人xxx| 久久久久国产a免费观看rela | 亚洲国产精品影院 | 久久 地址 | 久久歪歪 | 麻豆免费精品视频 | 国产高清视频在线 | 成人久久18免费网站麻豆 | 欧美日韩在线第一页 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 天天操比| 成年人在线观看 | 视频在线日韩 | av视屏在线| 免费亚洲黄色 | 麻豆国产露脸在线观看 | 亚洲一区二区三区在线看 | 在线免费黄色av | 激情五月看片 | 91大神一区二区三区 | 97视频在线免费 | 婷婷中文字幕 | 中国一级片在线 | 最新中文字幕在线播放 | 99视频精品全国免费 | 欧美亚洲精品在线观看 | 日韩簧片在线观看 | 美女免费黄视频网站 | 激情av一区二区 | 日韩精品在线免费观看 | 成人国产精品 | 亚洲天堂香蕉 | 99一级片| 五月综合色 | 二区三区在线观看 | 亚洲精品啊啊啊 | 99热最新 | 久久第四色 | 久久综合色综合88 | 亚洲精品99久久久久中文字幕 | 久草久草在线 | 91九色丨porny丨丰满6 | 日本美女xx| 亚洲精品乱码久久久久久久久久 | 91自拍成人 | 狠狠地日| 日韩午夜精品福利 | 美女网站在线观看 | 九九有精品 | 国产精品日韩久久久久 | 青青河边草观看完整版高清 | 免费观看的黄色片 | 精品亚洲视频在线观看 | 日韩三级在线 | 中文字幕日本特黄aa毛片 | 成人在线视频在线观看 | 97视频网站| 激情五月伊人 | 午夜精品久久久久久久99无限制 | 96久久欧美麻豆网站 | 成人国产精品一区二区 | 久久久久在线视频 | 中文字幕一区二区三区乱码不卡 | 日韩亚洲欧美中文字幕 | 婷婷激情5月天 | 在线观看免费色 | 国产精品久久久久久久电影 | 亚洲精品在线观看av | 午夜.dj高清免费观看视频 | 日韩有码第一页 | 麻豆国产视频 | 日本黄色免费在线 | 精品国产一区二区三区av性色 | 日韩免费网址 | 国产精品欧美久久久久无广告 | 黄色小说在线免费观看 | 色婷婷色| 亚洲乱码中文字幕综合 | 在线免费观看成人 | 欧美aa在线 | 久久综合婷婷综合 | 91大神一区二区三区 | 青草草在线| 日韩午夜在线 | 久久综合久久八八 | 国产精品婷婷 | 久久久国产99久久国产一 | 精品视频在线免费 | 国产精品一区二区三区观看 | 国产精品综合久久久久久 | 婷婷丁香在线 | 欧美日韩一区三区 | 久久人91精品久久久久久不卡 | 久久综合中文字幕 | 欧美亚洲国产精品久久高清浪潮 | 又黄又爽又无遮挡的视频 | 国产999精品视频 | 91视频高清 | 成人亚洲欧美 | 午夜精品导航 | 色鬼综合网 | 日韩专区视频 | 狠狠狠色丁香婷婷综合激情 | 国产九九九九九 | 九九久久久久久久久激情 | 国产精品中文字幕在线 | 91成年人在线观看 | 国产精品精品久久久 | 亚洲精品乱码久久久久久蜜桃动漫 | 亚洲国产精品一区二区尤物区 | 色视频在线 | av中文在线影视 | 亚洲精品国产拍在线 | 麻豆成人在线观看 | 91成人短视频在线观看 | 五月婷av| 中文字幕一区二区三区久久蜜桃 | 免费在线观看国产黄 | www.黄色 | 日本精品中文字幕在线观看 | 日韩字幕 | 91原创在线观看 | 国产亚洲久一区二区 | 亚洲一区 av| 久久99精品久久久久婷婷 | 美女黄久久 | 精品无人国产偷自产在线 | 国产精品爽爽久久久久久蜜臀 | 亚洲另类xxxx| 91免费看黄| 日韩成人免费观看 | 久青草影院 | 欧美性生活免费 | 国产三级精品三级在线观看 | 亚洲国产中文在线 | 日本性xxx | 欧美成年人在线视频 | 欧美亚洲精品一区 | 在线观看岛国片 | 国产小视频在线播放 | 日韩在线资源 | 麻豆视频在线看 | 免费av网站在线看 | 国产精品手机看片 | 日韩高清免费无专码区 | 日本三级香港三级人妇99 | 在线观看精品一区 | 日韩精品一区二区三区电影 | 亚洲成人在线免费 | 91综合视频在线观看 | 激情网五月| 在线观看视频91 | 99精品视频在线免费观看 | 香蕉视频国产在线 | 亚洲综合色视频 | 亚洲国产精品成人av | 午夜18视频在线观看 | 狠狠色丁香婷婷综合最新地址 | 免费观看一区 | 久久99操 | 激情伊人五月天久久综合 | 欧美黄色特级片 | 一区二区在线不卡 | 久久伊人婷婷 | 欧洲av在线 | 在线观看视频日韩 | 波多野结衣在线中文字幕 | 亚洲高清在线视频 | 亚洲视频在线观看免费 | 九草视频在线观看 | 韩国一区在线 | 久久99久久久久久 | 国产在线播放一区二区 | 黄色国产成人 | 久久免费视频在线观看6 | 亚洲极色 | 久久黄色网 | 国产精品乱码久久久久久1区2区 | 在线观看日本高清mv视频 | 97超碰在线久草超碰在线观看 | 四虎www.| www.午夜色.com | 国产精品久久三 | 成人羞羞免费 | 亚洲精品五月 | 中文字幕网站视频在线 | 亚洲成人二区 | 午夜国产一区二区三区四区 | 丁香视频全集免费观看 | 久草视频在线资源 | 激情小说 五月 | 亚洲japanese制服美女 | 日韩av中文字幕在线免费观看 | 国产色秀视频 | 久久免费精彩视频 | 色中色综合 | www.超碰 | 婷婷色婷婷 | 亚洲国内精品在线 | 在线不卡视频 | 99久久99视频只有精品 | 久久avav| 免费看一及片 | 久久天天躁夜夜躁狠狠躁2022 | av一级片在线观看 | 人人爽人人爽人人片av免 | av高清在线 | 国产在线观看你懂得 | 天天操天天爽天天干 | 成人午夜在线电影 | 97热视频| 黄色福利视频网站 | 日韩va亚洲va欧美va久久 | 国产男女无遮挡猛进猛出在线观看 | 色综合久久88 | 国产精品人成电影在线观看 | 精品久久久久久久 | 美女黄频在线观看 | 黄色小说免费在线观看 | 久久久久www | 天天操天天干天天操天天干 | 国产精品久久毛片 | 国产精品一区免费看8c0m | 依人成人综合网 | 欧美另类xxx | 丝袜美腿亚洲 | 中日韩在线 | 在线免费视频a | 337p日本欧洲亚洲大胆裸体艺术 | 五月视频 | 亚洲欧美精品一区 | 国产精品一码二码三码在线 | 999超碰| 色香蕉网 | 婷婷日日 | 色婷婷啪啪免费在线电影观看 | 国产一区二区三区在线 | 亚洲视频久久久久 | 日韩精品一区二区电影 | 国产手机视频 | 美女视频又黄又免费 | 久久伊人热| 国产青春久久久国产毛片 | 婷婷色在线播放 | 欧美巨大荫蒂茸毛毛人妖 | 中文字幕首页 | 高清免费av在线 | av一区二区三区在线 | 国内精品久久影院 | 精品国产99国产精品 | 久久久久久高潮国产精品视 | 久草久| 国产精品原创视频 | 99久久久国产精品 | 中文字幕视频一区 | 三级在线国产 | 亚洲国产精品va在线看黑人 | 毛片永久新网址首页 | 欧美专区日韩专区 | 久久精品9 | 99精品国产一区二区三区不卡 | 久艹视频在线观看 | 在线免费观看国产视频 | 视频一区二区三区视频 | 十八岁以下禁止观看的1000个网站 | 国产精品福利午夜在线观看 | 国产精品大尺度 | 97人人添人澡人人爽超碰动图 | 五月精品 | 国产一级h| 日韩精品高清不卡 | 国产精品午夜久久久久久99热 | 色综合色综合久久综合频道88 | 狠狠躁夜夜a产精品视频 | 人人草在线视频 | 国产精品6 | 久久综合影视 | 日韩91精品 | 超碰在线中文字幕 | 九九在线国产视频 | 精品国产亚洲在线 | 久久人人97超碰com | 婷婷色综合 | 天天看天天操 | 久久婷婷国产色一区二区三区 | 欧美性生活免费 | 国产精品久久久久一区二区三区共 | 国产中文字幕视频在线观看 | 粉嫩av一区二区三区免费 | 日日天天干 | 欧美激情视频在线观看免费 | 国产精品一级在线 | 久久久午夜视频 | 日韩美女黄色片 | 99久久99久久综合 | 九九av| 免费视频区 | 综合国产在线观看 | 婷婷丁香社区 | 久久久午夜精品福利内容 | 亚洲激情一区二区三区 | 亚洲国产精品免费 | 国产精品剧情 | 国产色区 | 好看的国产精品视频 | 亚洲黄色app | 国产精品va视频 | 99国产高清| 青青久草在线 | 日韩高清三区 | 黄色字幕网 | 国产精品久久婷婷六月丁香 | 九九精品视频在线 | 91新人在线观看 | 国产 在线观看 | 中文字幕一区二区三 | a黄色影院| 婷婷中文字幕 | 99精品久久只有精品 | 日韩视频在线观看免费 | 99久久精品国产免费看不卡 | 欧美一级看片 | 欧美在线99 | 久草在线综合 | 亚洲一区精品人人爽人人躁 | 国产一区二区在线视频观看 | av高清不卡 | 青青河边草免费直播 | 中文字幕人成不卡一区 | 麻豆91在线看 | 国产精品电影一区二区 | 国产中文字幕在线观看 | 亚洲最新合集 | 欧美日韩18 | 有码一区二区三区 | 久久久久久久电影 | 色婷婷在线播放 | 国产亚洲精品久久久久久无几年桃 | 手机av资源| 色婷婷九月| 最近能播放的中文字幕 | 日韩欧美高清在线 | 96精品视频| 中文字幕 在线看 | 人人草在线视频 | 国产手机视频精品 | 久久影视一区 | 精品一区二区在线免费观看 | 久久国产一区二区三区 | 激情五月五月婷婷 | 四虎永久视频 | 亚洲一区欧美精品 | 欧美日韩在线观看一区二区 | 在线观看黄色国产 | 黄色性av| 新版资源中文在线观看 | www.久久91 | 欧美一级电影 | 99精品视频在线 | 国产成人精品一区二区三区福利 | 亚洲精品国产精品99久久 | 日韩婷婷 | 色综合久久综合 | 美女视频是黄的免费观看 | 免费美女久久99 | 射射射av | 欧美日韩在线视频一区 | 久久精品精品电影网 | 激情视频在线高清看 | 久久av电影| 国产精品6 | 成人av电影免费在线观看 | 国产一级片观看 | 中文字幕观看在线 | 久久精品99国产精品日本 | 久久香蕉电影网 | 日韩动漫免费观看高清完整版在线观看 | 一区二区三区福利 | 一级免费黄视频 | 二区三区毛片 | 黄色av影视 | 国产精久久久久久妇女av | 探花视频在线观看 | 国产一级二级在线观看 | h动漫中文字幕 | 欧美在线视频不卡 | 日日噜噜噜噜夜夜爽亚洲精品 | www.夜夜操.com | 午夜电影av | 在线一区二区三区 | 亚洲最新合集 | 天堂视频中文在线 | 狠狠色丁香婷婷综合久久片 | 97超碰人人澡人人爱 | 久久精品99国产国产 | 一区二区三区视频网站 | 国产裸体视频网站 | 日韩二区在线播放 | 91高清完整版在线观看 | 国产免费看| 日韩欧美视频在线免费观看 | 亚洲精品xxxx | 天天躁日日躁狠狠 | 久久综合色一综合色88 | 免费福利片 | 婷婷激情小说网 | 国产一区视频在线观看免费 | 成人在线视频一区 | 久久深夜福利免费观看 | 国产一区二区三区免费观看视频 | 国产精品久久电影观看 | 亚洲精品在线网站 | 久久在视频 | 国产一区二区在线播放 | 国产精品久久久久久久久搜平片 | 99视频在线精品免费观看2 | 国产亚洲精品bv在线观看 | 亚洲国产欧美在线人成大黄瓜 | 91丨九色丨国产丨porny精品 | 成人在线黄色电影 | 五月婷婷六月丁香 | 日本电影久久 | 国产精品视频免费 | 99久久久久久久 | www色片| 精品国产诱惑 | 在线国产视频一区 | 99免费| 久久久久久免费视频 | 黄色免费国产 | 国产原创在线观看 | 久久亚洲在线 | 色a资源在线 | 婷婷在线不卡 | 九九免费观看全部免费视频 | 婷婷丁香在线 | 天天玩天天操天天射 | 亚洲专区欧美专区 | 天天爽夜夜爽人人爽曰av | 91香蕉视频好色先生 | 久久国产一区二区 | 成人国产电影在线观看 | 欧美日韩在线观看一区二区 | 激情欧美一区二区三区 | 在线视频你懂 | 亚洲国产视频网站 | 国产精品一区二区三区四 | www.色就是色 | 成人av视屏 | 在线观看完整版免费 | 九九热有精品 | 久久精品一二三 | 日日操天天爽 | 久久亚洲成人网 | 免费亚洲黄色 | 日本xxxx.com | 天天碰天天操视频 |