日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 表情,软键盘冲突解决方案(仿微博等SNS应用)

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 表情,软键盘冲突解决方案(仿微博等SNS应用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 之前總想搞一下這個模塊,可是由于忙碌總是推遲,現在就把這塊好好的彌補過來,下面是我實現的思路.本人才疏學淺,還望大家不要見笑。 ?

? ? ? ? 首先我們還是先看寫示例:

?? ?? ?? ??

? ? ? 上面應用應該不用我過多介紹,下面我簡單介紹下我如何實現的吧,想必這是大家最關心,前提說一點,思路上如果有不足的地方,或者有好的建議什么的,麻煩您多多指出,大家一起進步嘛.

? ? ? 首先我們從布局開始:

? ??

微博:紅色方框我們稱為底部導航欄,而藍色部分是我們的表情窗口(包含表情分頁點).

我的布局:或許大家看不到表情的布局,這是以因為我讓她gone了.他就在底部導航欄的下面.

下面是表情布局代碼:ViewPager添加表情GridView.這里我用的是相對布局.或者FrameLayout,只是為了UE效果好一點.

?

<RelativeLayoutandroid:id="@+id/rlayout_emoji"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@color/note_toolbar_bg"android:orientation="vertical"android:visibility="gone" ><android.support.v4.view.ViewPagerandroid:id="@+id/vp_emoji"android:layout_width="fill_parent"android:layout_height="wrap_content" /><LinearLayoutandroid:id="@+id/layout_point"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:gravity="center"android:orientation="horizontal"android:padding="10dip" ></LinearLayout></RelativeLayout>

Trouble 1有經驗的朋友都知道, ViewPager這個布局中的wrap_content自適應是不起作用的.

?

? ? ? ? 我google了好久,也沒有找到相關的解決方案,大部分都是寫死(這點肯定是不允許的),ViewPager的父親是ViewGroup,之前也試著基于ViewGoup實現過ViewPager的效果,想自己搞一個控件,可是有點不愿敲那么多代碼,最后一氣之下:決定代碼中動態算取表情框的高度,然后對表情框進行設置.反正高度變化頻率不大.首先我們顯示三行表情圖標,加上之間的間距,可以算取ViewPager應占有的高度.然后我們還要算取分頁點應占有的高度,二者加起來就是我們表情框最終占有的高度.這樣我們就可以實現表情框的顯示了,有段開發經驗的朋友實現這個應該很簡單的.(代碼我就不貼了,方法比較笨拙.)

Trouble 2:軟鍵盤隱藏和顯示問題.
? ? ?
?首先我們先來看些軟鍵盤相關的解釋.

? ? ? ?針對軟鍵盤,如果想讓鍵盤覆蓋我們視圖控件.那么在AndroidManifest.xml中對該Activity加上android:windowSoftInputMode="adjustPan" ?如果想讓軟鍵盤不覆蓋我們的視圖,我們應該加上android:windowSoftInputMode="stateVisible|adjustResize"?這樣屏幕會上移動.

? ? ? ? 相關的SoftInputMode值:

stateUnspecified:軟鍵盤的狀態(是否它是隱藏或可見)沒有被指定。系統將選擇一個合適的狀態或依賴于主題的設置。這個是為了軟件盤行為默認的設置。

stateUnchanged:軟鍵盤被保持無論它上次是什么狀態,是否可見或隱藏,當主窗口出現在前面時。

stateHidden:當用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當用戶確定導航到該Activity時,而不是返回到它由于離開另一個Activity。

stateAlwaysHidden:軟鍵盤總是被隱藏的,當該Activity主窗口獲取焦點時。

stateVisible:軟鍵盤是可見的,當那個是正常合適的時(當用戶導航到Activity主窗口時)。

stateAlwaysVisible:當用戶選擇這個Activity時,軟鍵盤是可見的——也就是,也就是,當用戶確定導航到該Activity時,而不是返回到它由于離開另一個Activity。

adjustUnspecified:它不被指定是否該Activity主窗口調整大小以便留出軟鍵盤的空間,或是否窗口上的內容得到屏幕上當前的焦點是可見的。系統將自動選擇這些模式中一種主要依賴于是否窗口的內容有任何布局視圖能夠滾動他們的內容。如果有這樣的一個視圖,這個窗口將調整大小,這樣的假設可以使滾動窗口的內容在一個較小的區域中可見的。這個是主窗口默認的行為設置。

adjustResize:該Activity主窗口總是被調整屏幕的大小以便留出軟鍵盤的空間.

adjustPan:該Activity主窗口并不調整屏幕的大小以便留出軟鍵盤的空間。相反,當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分。這個通常是不期望比調整大小,因為用戶可能關閉軟鍵盤以便獲得與被覆蓋內容的交互操作。

? ? ? ? 之前做項目用到軟鍵盤的時候總是googele,找到了就copy+paste,也不理解究竟是Why.這次算是花點時間整理了下,希望下次可以自己搞定。有點跑題了,言歸正傳,如果你在配置文件中設置這些SoftInputMode應該都達不到理想的效果,這里我分析一下微博等應用的操作。


首先我跳轉到了微博的發表頁面,這個時候軟鍵盤顯示,并且軟鍵盤沒有遮擋控件,所以模式應該為stateVisible|adjustResize.而當我們點擊表情頭像的時候,軟鍵盤隱藏,顯示表情框(仔細操作下應該會發現,軟鍵盤在隱藏的過程表情框直接都顯示好了,用戶體驗很好..在軟件盤隱藏的時候模式應該是adjustPan.既然模式是動態改變的,那么在配置文件中就解決不了問題了,我們只有在代碼中動態控件。


具體代碼如下:

InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (rlayout_emoji.getVisibility() == View.VISIBLE) {
iv_note_emoticon
.setImageResource(R.drawable.btn_emoticon_selector);
rlayout_emoji.setVisibility(View.GONE);
getWindow()
.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

// 打開軟鍵盤
mInputMethodManager.showSoftInput(et_note,
InputMethodManager.SHOW_FORCED);

} else {
iv_note_emoticon
.setImageResource(R.drawable.btn_keyboard_selector);
rlayout_emoji.setVisibility(View.VISIBLE);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??// 隱藏軟鍵盤
mInputMethodManager.hideSoftInputFromWindow(getCurrentFocus()
.getApplicationWindowToken(), 0);


}

代碼我想就不用我解釋了,實現起來很簡單,只是我google了那么久都沒有找到方案,最終還是自己無意中想到了。這樣我們就做到和微博的效果一樣了。

? ? ? ?總之做應用要注重的就是用戶體驗,操作一下比較fashion的應用就可以看到,大公司與小公司的差別在哪里。

? ? ? ?在這里我發一下牢騷,我呆過三家公司,可沒有一家公司讓我滿意,別說流程了,連個像樣的UI都做不到,總覺得公司是在敷衍移動產品,認為不就是一個UI嗎,不就是一些UE操作嗎,流程隨便一劃,設計隨便一搞,最后隨便找個web的前端工程師隨便劃幾個Psd文件就開工了.你說這樣開發出來的應用有用嗎,用戶會埋單嗎。沒有用戶,老板你如何變現!!!所以想開發一款應用,不管是大是小,一定要用心,不牢騷了,鄙人已經辭去工作專心搞自己的項目,總之我的理念就是:UI+UE這是最近本的移動應用要求.

最后看一下實現的效果吧.(Demo版)

? ? ?


就說到這里,如有疑問請留言.











?

總結

以上是生活随笔為你收集整理的android 表情,软键盘冲突解决方案(仿微博等SNS应用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。