版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】Snackbar怎么在Android中使用
本篇文章為大家展示了Snackbar怎么在Android中使用,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。要使用Snackbar,需要在項目的build.gradle中添加依賴dependencies
{
compile
'com.android.support:design:23.4.0'
}Snackbar的使用方法和Toast很相似Snackbar.make(mOpenTv,
"消息內(nèi)容",
Snackbar.LENGTH_SHORT)
.setAction("確定",
new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
}
})
.show();第一個參數(shù)需要傳入一個View,可以是界面當中的任意一個View控件,Snackbar會自動根據(jù)這個控件找到最外層的布局來顯示第二個參數(shù)就是我們需要顯示的內(nèi)容,注意這里的內(nèi)容最多顯示兩行哦,超出兩行后的內(nèi)容會變成“…”第三個參數(shù)為Snackbar顯示的時長,有三種模式供選擇LENGTH_SHORT:短時間顯示LENGTH_LONG:長時間顯示LENGTH_INDEFINITE:一直顯示,只有當用戶觸發(fā)Action點擊事件或手動刪除時才會消失Snackbar可以通過setAction方法設置一個點擊事件,和用戶進行交互我們還可以通過setCallback方法來監(jiān)聽Snackbar的顯示和關閉
Snackbar
sb
=
Snackbar.make(mOpenTv,
"消息內(nèi)容",
Snackbar.LENGTH_SHORT);
sb.setCallback(new
Snackbar.Callback()
{
@Override
public
void
onDismissed(Snackbar
snackbar,
int
event)
{
super.onDismissed(snackbar,
event);
//
Snackbar關閉時回調(diào)
}
@Override
public
void
onShown(Snackbar
snackbar)
{
super.onShown(snackbar);
//
Snackbar打開時回調(diào)
}
});
sb.show();Snackbar還支持滑出刪除,需要在布局文件中使用CoordinatorLayout作為根布局建議要使用Snackbar的時候最好是以CoordinatorLayout作為根布局,如果以其它RelativeLayout,LinearLayout等作為根布局的話,會出現(xiàn)以下這種情況FloatingActionButton被遮到了,使用CoordinatorLayout作為根布局可以避免這種情況Snackbar只能在底部顯示嗎?是也不是,為啥這么說呢,Snackbar確實是在CoordinatorLayout底部顯示的,但并不等于是在屏幕頂部首先我們要知道Snackbar顯示的原理是什么之前介紹中的第一個傳進去的參數(shù)View,Snackbar會通過這個View控件找到它所在的根布局,我們來查看下源碼
public
static
Snackbar
make(@NonNull
View
view,
@NonNull
CharSequence
text,
@Duration
int
duration)
{
Snackbar
snackbar
=
new
Snackbar(findSuitableParent(view));
snackbar.setText(text);
snackbar.setDuration(duration);
return
snackbar;
}我們傳進去的view會經(jīng)過findSuitableParent方法的處理,我們再來看下這個方法的具體實現(xiàn)
private
static
ViewGroup
findSuitableParent(View
view)
{
ViewGroup
fallback
=
null;
do
{
if
(view
instanceof
CoordinatorLayout)
{
//
We've
found
a
CoordinatorLayout,
use
it
return
(ViewGroup)
view;
}
else
if
(view
instanceof
FrameLayout)
{
if
(view.getId()
==
android.R.id.content)
{
//
If
we've
hit
the
decor
content
view,
then
we
didn't
find
a
CoL
in
the
//
hierarchy,
so
use
it.
return
(ViewGroup)
view;
}
else
{
//
It's
not
the
content
view
but
we'll
use
it
as
our
fallback
fallback
=
(ViewGroup)
view;
}
}
if
(view
!=
null)
{
//
Else,
we
will
loop
and
crawl
up
the
view
hierarchy
and
try
to
find
a
parent
final
ViewParent
parent
=
view.getParent();
view
=
parent
instanceof
View
?
(View)
parent
:
null;
}
}
while
(view
!=
null);
//
If
we
reach
here
then
we
didn't
find
a
CoL
or
a
suitable
content
view
so
we'll
fallback
return
fallback;
}詳細的過程google的工程師已經(jīng)寫的非常的清楚了,我們主要需要了解的就是當一個View的直接父布局為CoordinatorLayout時,就以這個CoordinatorLayout為標準來顯示Snackbar我們可以做個小實驗驗證一下在傳入的View控件外面套一層CoordinatorLayout
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:id="@+id/tv_open_snackbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="打開Snackbar"
android:textSize="28sp"/>
</android.support.design.widget.CoordinatorLayout>再運行一下看看,效果就變成了下面這樣所以說Snackbar的顯示位置還是可以通過這個小技巧來改變的如果嫌默認的Snackbar太丑怎么辦?我們可以來自定義它的外觀1.改變按鈕的文字顏色通過調(diào)用setActionTextColor方法即可改變按鈕的文字顏色
Snackbar
sb
=
Snackbar.make(mOpenTv,
"消息內(nèi)容",
Snackbar.LENGTH_SHORT);
sb.setAction("確定",
new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
}
});
sb.setActionTextColor(Color.YELLOW);
sb.show();2.改變消息內(nèi)容的文字顏色Snackbar沒有給我們提供改變消息文本顏色的api接口,但在查看源碼時發(fā)現(xiàn)了這個方法getView
/**
*
Returns
the
{@link
Snackbar}'s
view.
*/
@NonNull
public
View
getView()
{
return
mView;
}這里返回的mView其實是一個SnackbarLayout布局,在SnackbarLayout的構(gòu)造方法中找到了它的布局文件design_layout_snackbar_include
//
Now
inflate
our
content.
We
need
to
do
this
manually
rather
than
using
an
<include>
//
in
the
layout
since
older
versions
of
the
Android
do
not
inflate
includes
with
//
the
correct
Context.
LayoutInflater.from(context).inflate(R.layout.design_layout_snackbar_include,
this);design_layout_snackbar_include布局文件里只有兩個控件,一個TextView,一個Button<merge
xmlns:android="/apk/res/android">
<TextView
android:id="@+id/snackbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="@dimen/design_snackbar_padding_vertical"
android:paddingBottom="@dimen/design_snackbar_padding_vertical"
android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
android:paddingRight="@dimen/design_snackbar_padding_horizontal"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
android:maxLines="@integer/design_snackbar_text_max_lines"
android:layout_gravity="center_vertical|left|start"
android:ellipsize="end"
android:textAlignment="viewStart"/>
<Button
android:id="@+id/snackbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
android:layout_gravity="center_vertical|right|end"
android:paddingTop="@dimen/design_snackbar_padding_vertical"
android:paddingBottom="@dimen/design_snackbar_padding_vertical"
android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
android:paddingRight="@dimen/design_snackbar_padding_horizontal"
android:visibility="gone"
android:textColor="?attr/colorAccent"
/>
</merge>相信看到這里大家應該知道怎么做了,TextView的id為snackbar_text,我們通過getView()來獲取這個TextView控件
Snackbar
sb
=
Snackbar.make(mOpenTv,
"消息內(nèi)容",
Snackbar.LENGTH_SHORT);
sb.setAction("確定",
new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
}
});
sb.setActionTextColor(Color.YELLOW);
View
view
=
sb.getView();
TextView
tv
=
(TextView)
view.findViewById(R.id.snackbar_text);
tv.setTextColor(Color.RED);
sb.show();同樣的,我們也可以通過tv.setTextSize設置它的文字大小3.改變消息內(nèi)容的背景同理,根據(jù)以上方法,得到它的布局,調(diào)用對應的api接口就好
View
view
=
sb.getView();
view.setBackgroundColor(Color.RED);像這種紅紅的給用戶警告的提示,是不是比Toast要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國政法大學馬克思主義基本原理概論期末考試模擬題含答案解析(必刷)
- 2025年橫峰縣招教考試備考題庫及答案解析(奪冠)
- 2025年內(nèi)蒙古商貿(mào)職業(yè)學院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2025年撫遠縣幼兒園教師招教考試備考題庫附答案解析
- 2025年南鄭縣幼兒園教師招教考試備考題庫帶答案解析(奪冠)
- 2025年松原職業(yè)技術學院單招職業(yè)技能考試模擬測試卷帶答案解析
- 2024年貴州民族大學馬克思主義基本原理概論期末考試題及答案解析(必刷)
- 2025年三亞城市職業(yè)學院馬克思主義基本原理概論期末考試模擬題含答案解析(奪冠)
- 制造業(yè)質(zhì)量安全培訓課件
- 口腔知識講坐
- 《鐵路技術管理規(guī)程》(普速鐵路部分)
- 2024-2025年度“地球小博士”全國地理科普知識大賽參考試題庫(含答案)
- 北師大版六年級上冊分數(shù)混合運算100題帶答案
- (備份)JTS-133-3-2010關于發(fā)布《航道工程地質(zhì)勘察規(guī)范》(JTS 133-3-2010)的公告-PDF解密
- DB32T 4401-2022《綜合醫(yī)院建筑設計標準》
- 2020年高考中考考試工作經(jīng)費項目績效評價報告
- 2017-2022年近六年浙江省寧波市中考數(shù)學真題
- 加拿大鞋類市場銷售通
- 表B. 0 .11工程款支付報審表
- 低蛋白血癥的護理查房知識ppt
- 2023自愿離婚協(xié)議書范文(3篇)
評論
0/150
提交評論