ShapeDrawable,Style遂跟,AlertDialog

ShapeDrawable

用來自定義一些樣式,如按鈕點(diǎn)擊按下婴渡,CheckBox的選擇幻锁,進(jìn)度條的背景和進(jìn)度等。

Shape 標(biāo)簽
可以用來定義邊框边臼,圓角哄尔,梯度漸變色。
一般用于Button柠并,或Layout背景岭接。

shape:指定形狀
  矩形:rectangle
  橢圓:oval
  橫線:line
  圓環(huán):ring

solid:指定shape中填充的顏色

stroke:指定shape的邊框
  描邊的顏色:android:color
  描邊的寬度:android:width
  組成虛線的線段的寬度:android:dashWidth
  組成虛線的線段之間的間隔: android:dashGap

corners:指定矩形四個角的圓角程度
  給四個角設(shè)置相同的角度:android:radius
  設(shè)定左下角的角度:android:bottomLeftRadius
  設(shè)定右下角的角度:android:bottomRightRadius
  設(shè)定左上角的角度:android:TopLeftRadius
  設(shè)定右上角的角度:android:TopRightRadius

gradient:指定填充顏色的漸變
  漸變類別:android:type 
  linear(線性漸變)、radial(徑向漸變)臼予、sweep(掃描線漸變鸣戴,默認(rèn)為linear 

  漸變的角度:android:angle
  默認(rèn)為0,其值必須是45的倍數(shù)粘拾,0表示從左到右窄锅,90表示從下到上
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >

    <solid android:color="#C1C1C1" />

    <stroke
        android:width="8dp"
        android:color="#000"
        android:dashGap="2dp"
        android:dashWidth="3dp"
        />

    <corners android:radius="4dp" />

    <gradient
        android:type="linear"
        android:centerColor="@color/colorPrimary"
        android:endColor="@color/colorPrimaryDark"
        android:startColor="@color/colorAccent" />

</shape>
效果
selector 標(biāo)簽
用來控制選中按鈕狀態(tài)的改變
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#EEEEE0" />
            <corners android:radius="4dp" />
        </shape>
    </item>

    <item>
        <shape>
            <solid android:color="#FFEBCD" />
            <corners android:radius="4dp" />
        </shape>
    </item>
</selector>

控制按鈕文本按下后的狀態(tài)改變
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#EE0000"/>
    <item android:color="#E9967A"/>
</selector>
效果
CheckBox選中狀態(tài)的改變
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 一定是選中的在前,未選中的在后缰雇,用state_checked標(biāo)記 -->
    <item android:state_checked="true"
        android:drawable="@drawable/more_radio_selected" />
    
    <item android:drawable="@drawable/more_radio_normal"/>
</selector>

引用
<CheckBox
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:button="@drawable/check_demo" />
layer-list 標(biāo)簽

陰影效果入偷,重要!

進(jìn)度條背景進(jìn)度的改變
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 注意是背景圖在前 -->
    <item
        android:id="@android:id/background"
        android:drawable="@drawable/progress_bar_bg"/>
    
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/progress_bar_selected_bg"/>

</layer-list>

引用
   <ProgressBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="80"
        style="?android:attr/progressBarStyleHorizontal"
        
        android:progressDrawable="@drawable/layer_demo" />

幀動畫

選擇 animation-list 標(biāo)簽
AndroidStudio下只有在 Drawable 文件夾下有選擇械哟。

<?xml version="1.0" encoding="utf-8"?>
<!-- 劇本疏之,沒有提示純手寫  oneshot設(shè)置只播放一次還是循環(huán)播放 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" >

    <!-- 每一幀需要播放什么圖片 持續(xù)多少時間-->
    <item
        android:drawable="@drawable/girl_1"
        android:duration="200"/>

    <item
        android:drawable="@drawable/girl_2"
        android:duration="200"/>
</animation-list>

在控件引用
 <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:src="@drawable/animation_demo" />
代碼控制開啟動畫
private void AlertDemo() {
        btn = (Button) findViewById(R.id.btn);
        img = (ImageView) findViewById(R.id.img);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                
                //getDrawable()拿到圖片src
                AnimationDrawable anim = (AnimationDrawable) img.getDrawable();
                anim.start();
            }
        });
    }

風(fēng)格與主題

統(tǒng)一管理View的風(fēng)格和系統(tǒng)的主題樣式

在values下的styles操作

操作控件樣式

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 將共同的樣式抽取出來 -->
    <style name="BaseTheme">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <!-- parent繼承抽取出來的樣式 -->
    <style name="DemoTheme" parent="BaseTheme">
        <item name="android:text">@string/hello_world</item>
    </style>
</resources>

在Layout.xml中引用設(shè)定的樣式
<TextView style="@style/DemoTheme" />
如果想修改App整體的樣式風(fēng)格

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
  <!-- 自定義App整體風(fēng)格,注意name的命名空間是android: -->
    <style name="CustomAppTheme">
        <item name="android:background">@android:color/darker_gray</item>
    </style>
</resources>

在AndroidManifest.xml的Theme中引用樣式
<android:theme="@style/CustomAppTheme" />

AlertDialog

普通對話框

private void showDialog() {

        AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("標(biāo)題")
                .setMessage("提示消息")
                .setIcon(R.mipmap.ic_launcher_round)
                .setPositiveButton("確認(rèn)", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setNeutralButton("其他", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create();

        dialog.show();
    }
private void showDialog() {

        final String[] options = {"item1", "item2", "item3"};

        AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("單選")
                .setSingleChoiceItems(options, 0, 
                        new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        
                        String item = options[which];
                        Toast.makeText(mContext, item, Toast.LENGTH_SHORT).show();
                    }
                })
                .create();

        dialog.show();
    }
private void showDialog() {

      final String[] options = {"item1", "item2", "item3"};
      final boolean[] isCheck = {true, false, false};

      AlertDialog dialog = new AlertDialog.Builder(this)
              .setTitle("多選")
              .setMultiChoiceItems(options, isCheck,
                      new DialogInterface.OnMultiChoiceClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, 
                                              int which, boolean isChecked) {
                                
                              isCheck[which] = isChecked;
                          }
                      })
              .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                      String resCheck = "";
                      for (int i = 0; i < isCheck.length; i++) {
                          if (isCheck[i]) {
                              resCheck += options[i] + "\r\n";
                          }
                      }
                      Toast.makeText(mContext, resCheck, Toast.LENGTH_SHORT).show();
                  }
              })
              .create();

      dialog.show();
}
進(jìn)度條對話框

    private void showDialog() {
        final ProgressDialog dialog = new ProgressDialog(this);
//        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//        dialog.setMax(100);
//        dialog.setProgress(100);
//        dialog.setSecondaryProgress(80);
//        dialog.setCancelable(false);
        dialog.setMessage("提示信息");
        dialog.show();
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                dialog.dismiss();
            }
        }, 2000);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暇咆,一起剝皮案震驚了整個濱河市锋爪,隨后出現(xiàn)的幾起案子丙曙,更是在濱河造成了極大的恐慌,老刑警劉巖几缭,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件河泳,死亡現(xiàn)場離奇詭異,居然都是意外死亡年栓,警方通過查閱死者的電腦和手機(jī)拆挥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來某抓,“玉大人纸兔,你說我怎么就攤上這事》窀保” “怎么了汉矿?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長备禀。 經(jīng)常有香客問我洲拇,道長,這世上最難降的妖魔是什么曲尸? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任赋续,我火速辦了婚禮,結(jié)果婚禮上另患,老公的妹妹穿的比我還像新娘纽乱。我一直安慰自己,他們只是感情好昆箕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布鸦列。 她就那樣靜靜地躺著,像睡著了一般鹏倘。 火紅的嫁衣襯著肌膚如雪薯嗤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天纤泵,我揣著相機(jī)與錄音应民,去河邊找鬼。 笑死夕吻,一個胖子當(dāng)著我的面吹牛诲锹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涉馅,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼归园,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稚矿?” 一聲冷哼從身側(cè)響起庸诱,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捻浦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桥爽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱灿,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年钠四,在試婚紗的時候發(fā)現(xiàn)自己被綠了盗扒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缀去,死狀恐怖侣灶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕碎,我是刑警寧澤褥影,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站咏雌,受9級特大地震影響凡怎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赊抖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一统倒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熏迹,春花似錦檐薯、人聲如沸凝赛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墓猎。三九已至捆昏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毙沾,已是汗流浹背骗卜。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留左胞,地道東北人寇仓。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像烤宙,于是被迫代替她去往敵國和親遍烦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容