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

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

上學期做過一個java web的網站,初步瞭解了java寫網站後臺的流程,但是個人代碼的封裝性很差,完成後也沒有再去改動,這幾天會花時間整理一下把博客寫出來。 最近開始學習android的開發,用的是android studio,由於AVD和genymotion都用不上,所以用的真機調試,昨天發現掛


    上學期做過一個java web的網站,初步瞭解了java寫網站後臺的流程,但是個人代碼的封裝性很差,完成後也沒有再去改動,這幾天會花時間整理一下把博客寫出來。

    最近開始學習android的開發,用的是android studio,由於AVD和genymotion都用不上,所以用的真機調試,昨天發現掛部落衝突用的夜神安卓模擬器也可以用來調試程式,方便了不少。

    最近就邊看邊學邊寫寫博客,感覺有點凌亂,慢慢應該會好。

 

android應有的所有UI組件都繼承了View類,View組件非常類似於Swing編程的JPanel,代表一個空白的矩形區域。

ViewGroup是一個重要的子類,通常作為其他組件的容器,主要當成容器類使用,由於是抽象類,實際中使用其子類作為容器,例如各種佈局管理器

android的所有UI組件都是建立在View和ViewGroup基礎之上的。

 

ViewGroup容器控制其子組件的分佈依賴於ViewGroup.LayoutParams(子組件的佈局高度和寬度)/ViewGroup.MarginLayoutParams(頁邊距)

 

推薦使用XML佈局文件控制UI界面

!!正在app/src/main/res/layout目錄下定義一個主文件名任意的XML佈局文件後(R.java會自動收錄該佈局資源),java代碼可通過如下方法在Activity中顯示該視圖。

setContentView(R.layout.<資源文件名>);

findViewById(R.id.<android.id.屬性值>);

 

使用XML佈局文件和Java代碼混合控制UI界面

習慣上把變化小/行為比較固定的組件放在XML佈局文件中管理

變化較多/行為控制較複雜的交給Java代碼來管理

 

下麵是一個簡單圖片瀏覽器

首先在一個佈局文件中定義一個簡單的線性佈局容器

1 <!--定義線性佈局容器-->
2     <LinearLayout
3         xmlns:android="http://schemas.android.com/apk/res/android"
4         xmlns:tools="http://schemas.android.com/tools"
5         tools:context=".MainActivity"
6         android:id="@+id/root"
7         android:orientation="vertical"
8         android:layout_width="match_parent"
9         android:layout_height="match_parent"></LinearLayout>
View Code

下麵是該程式的實例代碼

當然首先要把圖片複製進app/res/drawable文件夾裡面

 1 public class MainActivity extends AppCompatActivity {
 2 
 3     //定義一個訪問圖片的數組
 4     int[] images = new int[]{
 5             R.drawable.java,
 6             R.drawable.javaee,
 7             R.drawable.swift,
 8     };
 9     int currentIma=0;
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14         //獲取LinearLayout佈局容器
15         LinearLayout main=(LinearLayout) findViewById(R.id.root);
16         //程式創建ImageView組件
17         final ImageView image=new ImageView(this);
18         //將ImageView組件添加到LinearLayout佈局容器中
19         main.addView(image);
20         //初始化時顯示第一張圖片
21         image.setImageResource(images[0]);
22         image.setOnClickListener(new View.OnClickListener(){
23             @Override
24             public void onClick(View v){
25                 //改變ImageView里顯示的圖片
26                 image.setImageResource(images[++currentIma%images.length]);
27             }
28         });
29         Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
30         setSupportActionBar(toolbar);
31 
32         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
33         fab.setOnClickListener(new View.OnClickListener() {
34             @Override
35             public void onClick(View view) {
36                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
37                         .setAction("Action", null).show();
38             }
39         });
40     }
41 }
View Code

 

然後看了一下開發自定義View的內容

首先定義一個繼承View基類的子類,然後重寫View類的一個或多個方法

下麵是跟隨手指的小球的程式實例(只重寫了onDraw方法和onTouchEvent方法)

1.自定義組件DrawView.java

 1 public class DrawView extends View {
 2     public float currentX=40;
 3     public float currentY=50;
 4     //定義並創建畫筆
 5     Paint p = new Paint();
 6     public DrawView(Context context){
 7         super(context);
 8     }
 9     public DrawView(Context context,AttributeSet set){
10         super(context,set);
11     }
12     @Override
13     public void onDraw(Canvas canvas){
14        super.onDraw(canvas);
15         //設置畫筆的顏色
16         p.setColor(Color.RED);
17         //繪製一個小圓(作為小球)
18         canvas.drawCircle(currentX, currentY, 15, p);
19     }
20     //為該組件的碰觸事件重寫時間處理方法
21     @Override
22     public boolean onTouchEvent(MotionEvent event){
23         //修改currentX,currentY兩個屬性
24         currentX=event.getX();
25         currentY=event.getY();
26         //通知當前組件重繪自己
27         invalidate();
28         //返回true表明該處理方法已經處理該事件
29         return true;
30     }
31 }
View Code

2.Activity類

 1 super.onCreate(savedInstanceState);
 2         setContentView(R.layout.activity_main);
 3         /*
 4         //獲取佈局文件中的LinearLayout容器
 5         LinearLayout root=(LinearLayout)findViewById(R.id.root);
 6 
 7         //創建DrawView組件
 8         final DrawView draw=new DrawView(this);
 9         //設置自定義組件的最小寬度,高度
10         draw.setMinimumWidth(300);
11         draw.setMinimumHeight(500);
12         root.addView(draw);
13 */
14 }
View Code

附:如果在佈局文件中管理該組件

 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         android:id="@+id/root">
 7         <mocking.com.followball.DrawView
 8             android:layout_width="match_parent"
 9             android:layout_height="match_parent" />
10     </LinearLayout>
View Code

則Activity類可以省去註釋的部分,效果圖如下。。新手入門

 


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

-Advertisement-
Play Games
更多相關文章
  • easyui提供了各種按鈕樣式,包括搜索、新增、保存、刪除等 搜索 增加 移除 保存 剪切 ...
  • 選擇1 選擇2 其中 iconCls 是按鈕的樣式JS的點擊事件控制: //搜索框點擊事件$('#ss').searchbox({ ...
  • 利用VS快捷鍵可以提高平時我們的開發效率,相信.net程式員都有意要學習,但是苦於太多,所以也只是瞭解一些簡單的快捷鍵。下麵記錄一下,以供日後查詢。 一、啟動編譯類 1、F5 開始調試 2、Ctrl+F5 啟動不調試 3、Ctrl+Shift+B 生成解決方案 4、Alt+F11 重新生成解決方案 ...
  • 策略模式的用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。策略模式是對演算法的包裝,是把使用演算法的責任和演算法本身分割開,委派給不同的對象管理。策略模式通常把一個系列的演算法包裝到一系列的策略類裡面,作為一個抽...
  • Visual Studio International Pack 包含一組類庫,該類庫擴展了.NET Framework對全球化軟體開發的支持。使用該類庫提供的類,.NET 開發人員可以更方便的創建支持多文化多語言的軟體應用下載地址:下載地址(1) (ChnCharInfo.dll)Simplifi...
  • 目前來說,使用JSON保存數據比較方便,前臺可以不用Test.aspx 頁面,可以直接用Html頁面,使用.aspx頁面的弊端就不在這裡熬述。 具體步驟如下: 1、新建一個Html頁面,命名為Test.html 1 <script type="text/javascript" src="easyui
  • 一般在網上搜C++如何調用C#的函數,出來的結果都是做成COM組件,但是這種方法dll安裝麻煩,需要註冊COM組件,需要管理員許可權,調試麻煩,經常需要重啟機器,反正有諸多不便。 然後在看《CLR via C#》時看到一種方法,可以免去這種苦惱。少廢話,先上代碼。C#類庫的:namespace Cl....
  • C#設計模式(1)——單例模式(Singleton)C#設計模式(2)——簡單工廠模式(Factory )C#設計模式(3)——工廠方法模式(Factory Method)C#設計模式(4)——抽象工廠模式(Abstract Factory)C#設計模式(5)——建造者模式(Builder Patt...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...