安卓應用的界面編程(3)

来源:http://www.cnblogs.com/wangkaipeng/archive/2016/01/30/5170413.html
-Advertisement-
Play Games

第二組UI組件:TextView及其子類 1. TextView(不允許用戶編輯文本內容)直接繼承了View,同時是EditText(允許用戶編輯文本內容)/Button兩個UI組件類的父類。TextView的作用就是在界面上顯示文本(類似JLabel) 下麵是TextView的幾個使用例子 1 <


第二組UI組件:TextView及其子類

1.

TextView(不允許用戶編輯文本內容)直接繼承了View,同時是EditText(允許用戶編輯文本內容)/Button兩個UI組件類的父類。TextView的作用就是在界面上顯示文本(類似JLabel)

下麵是TextView的幾個使用例子

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2         android:orientation="vertical"
 3         android:layout_width="match_parent"
 4         android:layout_height="match_parent">
 5         <!-- 設置字型大小為20pt,在文本框結尾處繪製圖片 -->
 6         <TextView
 7             android:layout_width="match_parent"
 8             android:layout_height="wrap_content"
 9             android:layout_marginTop="30pt"
10             android:text="我愛Java"
11             android:textSize="20pt"
12             android:drawableEnd="@drawable/doge"
13             android:drawableRight="@drawable/doge"/>
14         <!-- 設置中間省略,所以字母大寫 -->
15         <TextView
16             android:layout_width="match_parent"
17             android:layout_height="wrap_content"
18             android:singleLine="true"
19             android:text="我愛Java 我愛Java 我愛Java 我愛Java 我愛Java 我aaa Java"
20             android:ellipsize="middle"
21             android:textAllCaps="true"/>
22         <!-- 對郵件/電話增加鏈接 -->
23         <TextView
24             android:layout_width="match_parent"
25             android:layout_height="wrap_content"
26             android:singleLine="true"
27             android:text="郵件是[email protected],電話是222266666"
28             android:autoLink="email|phone"/>
29         <!-- 設置文字顏色/大小,並使用陰影 -->
30         <TextView
31             android:layout_width="match_parent"
32             android:layout_height="wrap_content"
33             android:text="測試文字"
34             android:shadowColor="#00f"
35             android:shadowDx="10.0"
36             android:shadowDy="8.0"
37             android:shadowRadius="3.0"
38             android:textColor="#f00"
39             android:textSize="18pt"/>
40         <!-- 測試密碼框 -->
41         <TextView
42             android:id="@+id/passwd"
43             android:layout_width="match_parent"
44             android:layout_height="wrap_content"
45             android:text="@string/hello"
46             android:password="true"/>
47         <CheckedTextView
48             android:layout_width="match_parent"
49             android:layout_height="wrap_content"
50             android:text="可勾選的文本"
51             android:checkMark="@drawable/doge"/>
52     </LinearLayout>
View Code

 

然後是一個圓角邊框/漸變背景的TextView的實例

先在兩個XML文件中定義兩個背景文件

bg_border.xml

1 <?xml version="1.0" encoding="utf-8"?>
2 <shape xmlns:android="http://schemas.android.com/apk/res/android">
3     <!-- 設置背景色為透明色 -->
4     <solid android:color="#0000" />
5     <!-- 設置紅色邊框 -->
6     <stroke android:width="4px" android:color="#f00" />
7 </shape>
View Code

bg_border1.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
 3     <!-- 指定圓角矩形的4個圓角的半徑 -->
 4     <corners android:topLeftRadius="20px"
 5         android:topRightRadius="5px"
 6         android:bottomRightRadius="20px"
 7         android:bottomLeftRadius="5px"/>
 8     <!-- 指定邊框線條的寬度和顏色 -->
 9     <stroke android:width="4px" android:color="#f0f" />
10     <!-- 指定使用漸變背景色,使用sweep類型的漸變,顏色從紅色到綠色到藍色 -->
11     <gradient android:startColor="#f00"
12         android:centerColor="#0f0"
13         android:endColor="#00f"
14         android:type="sweep"/>
15 </shape>
View Code

新增xml文件時,它是跑到layout目錄下的而且還無法移動。。我就把文件寫好剪切到了drawable文件夾裡面。

然後添加一個佈局文件border到layout目錄下

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6     <!-- 通過android:background指定背景 -->
 7     <TextView
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:text="帶邊框的文本"
11         android:textSize="24pt"
12         android:background="@drawable/bg_border"/>
13     <TextView
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:text="圓角邊框/漸變背景的文本"
17         android:textSize="24pt"
18         android:background="@drawable/bg_border1"/>
19 </LinearLayout>
View Code

在引用背景的兩行有感嘆號提示錯誤。但是找不到錯誤,程式運行的錯誤是空指針異常,不知道怎麼修改。但是可以看到右方的實例效果圖。

 錯誤的地方,求大神講解

 

2.EditText的功能與用法

 與TextView最大的區別是可以接受用戶輸入。最重要的屬性是inputType,該屬性相當於HTML的<input.../>元素的type屬性,用於將EditView設置為指定類型的輸入組件。

下麵是一個用戶相對友好的輸入界面

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:stretchColumns="1">
 6     <TextView
 7         android:layout_width="match_parent"
 8         android:layout_height="32sp" />
 9     <TableRow>
10         <TextView
11             android:layout_width="match_parent"
12             android:layout_height="wrap_content"
13             android:text="用戶名:"
14             android:textSize="16sp"/>
15         <EditText
16             android:layout_width="match_parent"
17             android:layout_height="wrap_content"
18             android:hint="請填寫登陸賬號"
19             android:selectAllOnFocus="true"/>
20     </TableRow>
21     <TableRow>
22         <TextView
23             android:layout_width="match_parent"
24             android:layout_height="wrap_content"
25             android:text="密碼:"
26             android:textSize="16sp"/>
27         <!-- android:inputType="numberPassword"表明只能接受數字密碼 -->
28         <EditText
29             android:layout_width="match_parent"
30             android:layout_height="wrap_content"
31             android:inputType="numberPassword"/>
32     </TableRow>
33     <TableRow>
34         <TextView
35             android:layout_width="match_parent"
36             android:layout_height="wrap_content"
37             android:text="年齡:"
38             android:textSize="16sp"/>
39         <!-- inputType="number"表明是數值輸入框 -->
40         <EditText
41             android:layout_width="match_parent"
42             android:layout_height="wrap_content"
43             android:inputType="number"/>
44     </TableRow>
45     <TableRow>
46         <TextView
47             android:layout_width="match_parent"
48             android:layout_height="wrap_content"
49             android:text="生日:"
50             android:textSize="16sp"/>
51         <!-- inputType="date"表明是日期輸入框 -->
52         <EditText
53             android:layout_width="match_parent"
54             android:layout_height="wrap_content"
55             android:inputType="date"/>
56     </TableRow>
57     <TableRow>
58         <TextView
59             android:layout_width="match_parent"
60             android:layout_height="wrap_content"
61             android:text="電話號碼:"
62             android:textSize="16sp"/>
63         <!-- inputType="phone"表明是輸入電話號碼的輸入框 -->
64         <EditText
65             android:layout_width="match_parent"
66             android:layout_height="wrap_content"
67             android:hint="請填寫您的電話號碼"
68             android:selectAllOnFocus="true"
69             android:inputType="phone"/>
70     </TableRow>
71     <Button
72         android:layout_width="wrap_content"
73         android:layout_height="wrap_content"
74         android:text="註冊"/>
75 </TableLayout>
View Code

切換不同的文本框時會啟用不同的鍵盤

 

3.Button

可以指定按鈕按下/鬆開時的圖片

還可以使用9Patch圖片作為背景(sdk/tools裡面的draw9patch.bat)可以設定縮放的圖片區域,防止圖片變形(暫時沒有實際操作)

下麵是一個簡單的使用說明

首先是一個界面佈局文件

 1 <LinearLayout
 2         xmlns:android="http://schemas.android.com/apk/res/android"
 3         android:orientation="vertical"
 4         android:layout_width="match_parent"
 5         android:layout_height="match_parent">
 6         <TextView
 7             android:layout_marginTop="80px"
 8             android:layout_width="wrap_content"
 9             android:layout_height="wrap_content" />
10         <!-- 文字帶陰影的按鈕 -->
11         <Button
12             android:layout_width="wrap_content"
13             android:layout_height="wrap_content"
14             android:text="文字帶陰影的按鈕"
15             android:textSize="12pt"
16             android:shadowColor="#aa5"
17             android:shadowRadius="1"
18             android:shadowDx="5"
19             android:shadowDy="5"/>
20         <!-- 普通文字按鈕 -->
21         <Button
22             android:layout_width="wrap_content"
23             android:layout_height="wrap_content"
24             android:background="@drawable/doge"
25             android:text="普通按鈕"
26             android:textSize="10pt" />
27         <!-- 帶文字的圖片按鈕 -->
28         <Button
29             android:layout_width="wrap_content"
30             android:layout_height="wrap_content"
31             android:background="@drawable/button_selector"
32             android:textSize="11px"
33             android:text="帶文字的圖片按鈕"/>
34     </LinearLayout>
View Code

裡面引用了一個xml文件,文件指定了第三個按鈕按下和鬆開時的圖片

1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3     <!-- 指定按鈕按下時的圖片 -->
4     <item android:state_pressed="true"
5         android:drawable="@drawable/three"/>
6     <!-- 指定按鈕鬆開時的圖片 -->
7     <item android:state_pressed="false"
8         android:drawable="@drawable/four"/>
9 </selector>
View Code

 

4.單選鈕(RadioButton)和覆選框(CheckBox)的功能與用法

比普通按鈕多了一個可選中的功能,可額外指定一個android:checked屬性(初始時是否被選中)

註意:如果在XML佈局文件中定義了一組單選鈕,並預設勾選了第一個單選鈕,則必須為該組單選鈕的每個按鈕指定android:id屬性值;否組這組單選鈕不能正常工作

XML佈局文件如下

 1 <TableLayout
 2         xmlns:android="http://schemas.android.com/apk/res/android"
 3         android:layout_width="match_parent"
 4         android:layout_height="match_parent">
 5         <TextView
 6             android:layout_width="match_parent"
 7             android:layout_height="wrap_content"
 8             android:layout_marginTop="100px"/>
 9         <TableRow>
10             <TextView
11                 android:layout_width="wrap_content"
12                 android:layout_height="wrap_content"
13                 android:text="性別"/>
14             <!-- 定義一組單選鈕 -->
15             <RadioGroup android:id="@+id/rg"
16                 android:orientation="horizontal"
17                 android:layout_gravity="center_horizontal">
18                 <!-- 定義兩個單選鈕 -->
19                 <RadioButton
20                     android:layout_width="wrap_content"
21                     android:layout_height="wrap_content"
22                     android:id="@+id/male"
23                     android:text="男"
24                     android:checked="true"/>
25                 <RadioButton
26                     android:layout_width="wrap_content"
27                     android:layout_height="wrap_content"
28                     android:id="@+id/female"
29                     android:text="女"/>
30             </RadioGroup>
31         </TableRow>
32         <TableRow>
33             <TextView
34                 android:layout_width="wrap_content"
35                 android:layout_height="wrap_content"
36                 android:text="喜歡的顏色:"/>
37             <!-- 定義一個垂直的線性佈局 -->
38             <LinearLayout
39                 android:layout_gravity="center_horizontal"
40                 android:orientation="vertical"
41                 android:layout_width="wrap_content"
42                 android:layout_height="wrap_content">
43                 <!-- 定義三個覆選框 -->
44                 <CheckBox
45                     android:layout_width="wrap_content"
46                     android:layout_height="wrap_content"
47                     android:text="紅色"
48                     android:checked="true"/>
49                 <CheckBox
50                     android:layout_width="wrap_content"
51                     android:layout_height="wrap_content"
52                     android:text="藍色"/>
53                 <CheckBox
54                     android:layout_width="wrap_content"
55                     android:layout_height="wrap_content"
56                     android:text="綠色"/>
57             </LinearLayout>
58         </TableRow>
59         <TextView
60             android:id="@+id/show"
61             android:layout_width="wrap_content"
62             android:layout_height="wrap_content"/>
63     </TableLayout>
View Code

為了監聽單選鈕/覆選框勾選狀態的改變,為他們添加事件監聽器,如下的代碼為RadioGroup添加了事件監聽器

 1 public class RadioButtonAndCheckBox extends AppCompatActivity {
 2 
 3     RadioGroup rg;
 4     TextView show;
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_radio_button_and_check_box);
 9         //獲取界面上rg/show兩個組件
10         rg=(RadioGroup)findViewById(R.id.rg);
11         show=(TextView)findViewById(R.id.show);
12         //為RadioGroup組件的onCheckedChanged事件綁定事件監聽器
13         rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
14         {
15             @Override
16             public void onCheckedChanged(RadioGroup group,int checkedId)
17             {
18                 //根據用戶勾選的單選按鈕來動態改變tip字元串的值
19                 String tip=checkedId==R.id.male?"您的性別是男":"您的性別是女";
20                 //修改show組件中的文本
21                 show.setText(tip);
22             }
23         });
24     }
25 }
View Code

運行效果如下

 

5.狀態開關按鈕(ToggleButton)和開關(Switch)的功能與用法

通常用於切換程式中的某種狀態,下麵是一個動態控制佈局的實例

在頁面中增加一個ToggleButton,隨著該按鈕狀態的改變,界面佈局中的LinearLayout佈局的方向在水平佈局/垂直佈局之間切換。如下是界面佈局文件

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2         android:orientation="vertical"
 3         android:layout_width="match_parent"
 4         android:layout_height="match_parent">
 5         <TextView
 6             android:layout_width="match_parent"
 7             android:layout_height="wrap_content"
 8             android:layout_marginTop="150px"/>
 9         <!-- 定義一個ToggleButton按鈕 -->
10         <ToggleButton
11             android:id="@+id/toggle"
12             android:layout_width="wrap_content"
13             android:layout_height="wrap_content"
14             android:textOff="橫向排列"
15             android:textOn="縱向排列"
16             android:checked="true"/>
17         <Switch
18             android:id="@+id/switcher"
19             android:layout_wid

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 臨近春節了,這段時間比較忙,各種趕項目,沒啥時間寫博客。/*** @brief 追加寫入數據到沙盒路徑** @param string 要寫入的字元串* @param fileName 把數據寫入文件的文件名*/+(void)writefile:(NSString *)string fileName...
  • Handler想必在大家寫Android代碼過程中已經運用得爐火純青,特別是在做阻塞操作線程到UI線程的更新上.Handler用得恰當,能防止很多多線程異常. 而Looper大家也肯定有接觸過,只不過寫應用的代碼一般不會直接用到Looper.但實際Handler處理Message的關鍵之處全都在於L
  • self.locationTimer =[NSTimer scheduledTimerWithTimeInterval: 0.01 target: self selector:@selector(transformAction) userInfo: nil repeats: YES];-(void)
  • 我現在有一個UIControllerView 裡面addView了一個UIView,我在點擊UIView的時候轉到另一個UIControllerView,按上面的導航條上面的返回按鈕返回第一個UIControllerView,在那個UIView里怎麼用pushViewController 在UIVi
  • 第三組UI組件:ImageView及其子類 主要功能是顯示圖片,任何Drawable對象都可使用ImageView來顯示。 1.圖片瀏覽器 下麵的圖片瀏覽器可以改變所查看圖片的透明度,可通過調用ImageView的setImageAlpha()方法實現。還可以通過一個小區域查看圖片的原始大小。(兩個
  • 這一部分主要研究AFN的上傳和下載功能,中間涉及到各種NSURLSessionTask的一些創建的解析和HTTPSessionManager對RESTful風格的web應用的支持,同時會穿插一點NSURLSession代理方法被調用的時機和對上傳的數據的序列化的步驟。 本文主要講解的是上傳和下載的代
  • 在我剛學android 時候,然後立即就做項目。那時連eclipse 使用都不是很熟練。很多功能都不知道。新手如果這時去改app應用的包名,沒有改好會變成所有控制項在R文件裡面id都找不到。 先上兩張圖: 如果你要改的話,一般是先改R文件所在的包名,用eclipse 的快捷方式改,選中com.exam
  • 當我想從一個VC跳轉到另一個VC的時候,一般會用 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))com
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...