Android Studio --- [學習筆記]Button、TextView、EditText

說明

  • 源代碼
  • 為了更全面的了解RN,先熟悉一下Android開發

第1章 Android 初體驗

1.1 Android開發概述

  • Android是Google開發的操作系統
  • Android開發是移動應用開發的表現形式之一(Android、IOS、H5 App、Native + H5、 RN、ionic、MUI…)

1.2 Android開發工具

  • Android Studio
  • 為什么使用Android Studio?
    • Android Studio是Google自己推出的Android集成開發工具,且Google已經停止對Eclipse的支持.

1.3 第一個Android應用

  • Everything begin with Hello World!
  • Android Studio最大的特定是使用Gradle來構建項目…
    [部分目錄說明]
  1. res: 存放資源
  2. drawable: 圖片
  3. layout: 布局文件
  4. mipmap-hdpi: logo圖片
  5. values: 顏色、文字
  6. AndroidMainfest.xml: 應用里面用到的所有內容,都需要在這個里面注冊一下

[部分代碼說明]

  • src/main/java/com.skypan.helloworld/MainActivity內的函數setContentView(R.layout.activity_main):表示,使用了activity_main布局
  • 打開activity_main.xml,將標簽名改為如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" />
</LinearLayout>
  • TextView android:text="Hello World": 顯示在手機上的值為Hello World

第2章 UI組件

2.1 布局管理器

  • 線性布局(LinearLayout)
  • 相對布局(RelativeLayout)
  • 以上兩種占了接近百分之99

LinearLayout(線性布局)

[最常用屬性]:

  • android:id: 控件的id
  • android:layout_width: 布局的寬度
  • android:layout_height: 布局的高度
  • android:background: 布局的背景顏色
  • android:layout_margin: 布局的左右邊距
  • android:layout_padding: 布局的內側邊距
  • android:orientation: 布局的方向
  • dp: 根據屏幕自己算出大小
  • match_parent: 匹配父元素
  • <View />: 是所有控件的父類,如<Button />
  • android: gravity= "bottom": 控件子元素的排列方式
  • weight: 權重,占父元素寬度(剩余)的權重.相當于flex布局中子元素的屬性flex:1; 把剩余內容按照權重去分配

[小結]:

  • 通過Android Studio新建的項目,入口文件是/app/src/main/java/com.skypan.helloworld/MainActivity
class MainActivity : AppCompatActivity() {override fun onCreate (saveInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}
}
  • 其中setContentView使用到了activity_main:總體的布局樣式

2.1.2 RelativeLayout(相對布局)

[最常見屬性]:

  • android:layout_toLeftOf: 在誰左邊
  • android:layout_toRightOf: 在誰右邊
  • android:layout_alignBottom: 跟誰底部對齊
  • android:layout_alignParentBottom: 跟父元素底部對齊
  • android:layout_below: 在誰的下面

[栗子]:

  • 靠父元素右下角對齊
<RelativeLayout><Viewandroid:id="@+id/view_1"android:layout_width="100dp"android:layout_height="100dp"android:background="#000000"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"/>
</RelativeLayout>
  • View2相對于View1的右邊對齊
<RelativeLayout><Viewandroid:id="@+id/view_1"android:layout_width="100dp"android:layout_height="100dp"android:background="#000000"/><Viewandroid:id="@+id/view_2"android:layout_width="100dp"android:layout_height="100dp"android:background="#FF0033"android:layout_toRightOf="@id/view_1"/>
</RelativeLayout>

2.2 TextView

  • 文字大小、顏色
  • 顯示不下使用…
  • 文字 + icon
  • 中劃線、下劃線

[栗子]:

  • 1.寫一個寬度隨父元素,高度等于文本高度的按鈕控件
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_textview"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"/>
</LinearLayout>
  • 2.點擊Button類實現跳轉
// MainActivity.java
import andoridx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {// 聲明 buttonprivate Button mBtnTextView;@overridepretected void onCreate(Bundle saveInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtnTextView = (Button) findViewById(R.id.btn_textview);mBtnTextView.setOutClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 跳轉到TextView演示界面Intent intent = new Intent(packageContext: MainActivity.this, TextViewActivity.class);startActivity(intent);}})}
}
  • 3.能在MainActivity中使用TextViewActivity的原因
  • AndroidMainfest.xml配置如下:
<applicationandroid:allowBckup="true"...<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
>
  • 4.Java操作的TextView: android:id="@+id/tv_4"
// TextViewActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import android.os.Bundle;
public class TextViewActivity extends AppCompatActivity {private TextView mTv4;@overrideprotected void onCreate (Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_view);// 獲取 id.tv_4mTv4 = (TextView) findViewById(R.id.tv_4);// 給 id.tv_4劃線mTv4.getPaint().setFlags(Paint.STRING_THRU_TEXT_FLAG);// 去鋸齒mTv4.getPaint().setAntiAlias(true)}
}

2.3 Button

  • 文字大小、顏色
  • 自定義背景形狀
  • 自定義按壓效果
  • 點擊事件

Button樣式(簡單)

  • activity_main.xml
<Buttonandroid:id="@+id/btn_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button"android:layout_marginTop="10dp" />

使用java操作控件

// MainActivity.java// 聲明控件
private Button mBtnButton
// 找到按鈕 btn_button
mBtnButton = (Button) findViewById(R.id.btn_button);
// 給 mBtnButton 添加點擊事件
mBtnButton.setOnClickListener(new View.OnClickListener(){// 點擊按鈕后執行的操作
})

實現跳轉

import andoirdx.appcompat.app.AppCompatActivity;
import andoird.widget.Button;
import android.content.Intent;public class MainActivity extends AppCompatActivity {// 聲明buttonprivate Button mBtnButton;@overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 找到按鈕mBtnButton = (Button) findViewById(R.id.btn_button);mBtnButton.setOnClickListener(new View.OnClickListener() {@ovrridepublic void onClick(View v) {// 跳轉到 Button 演示界面Intent intent = new Intent( packageContext: MainActivity.this, ButtonActivity.class);startActivity(intent);}})}
}

做一個矩形的按鈕

  • 1.在res/drawable -> New -> Drawable resource file -> btn_2.xml
  • 代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solidandroid:color="#ffffff" /><cornersandroid:radius="15dp" />

按壓效果

  • res/drawable/bg_btn4.xml
  • 樣式
<?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="#cc7c00" /><corners android:radius="15dp" /></shape></item><item android:state_pressed="false"><shape><solid android:color="#ff9900"><corners android:radius="15dp" /></shape></item>
</selector>
  • 引用如下
  • activity_button.xml
<Buttonandroid:id="@+id/btn_4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/btn_3"android:layout_marginTop="5dp"android:text="Button 4"android:textSize="20sp"android:textColor="#0066ff"android:background="@drawable/bg_btn4" />

點擊按鈕,響應Toast

  • 假設有按鈕如下: activity_button.xml
<Button...android:onClick="showToast" />
  • 對應Java文件 ButtonActivity.java 中加入如下:
public void showToast(View view) {Toast.makeText(context: this, text:'點擊', Toast.LENGTH_SHORT).show();
}

[報錯]:

  • Could not find method showToast(View) in a parent or ancestor Context for android: 寫按鈕觸發事件的時候,沒有傳入參數 View view,將public void showToast()改為public void showToast(View view)

點擊按鈕,響應Toast[方法2]

  • [核心方法] :Button.setOnClickListener()
  • 假設有按鈕如下: activity_button.xml
<Buttonandroid:id="@+id/btn_3"....
/>
  • 對于的Java文件ButtonActivity.java中加入如下:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;public class ButtonActivity extends AppCompatActivity {private Button mBtn3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mBtn3 = (Button) findViewById(R.id.btn_3);mBtn3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(ButtonActivity.this, 'btn3被點擊', Toast.LENGTH_SHORT).show();}})}
}

給TextView控件添加點擊事件

  • TextView控件activity_button.xml,如下:
<TextViewandroid:id="@+id/tv_1"...
/>
  • 在Java中獲取控件,并設置點擊事件ButtonActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;public class ButtonActivity extends AppCompatActivity {private TextView mTv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// tv_1的點擊事件mTv1 = (TextView) findViewById(R.id.tv_1);mTv1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Toast.makeText(ButtonActivity.this, "TextView被點擊", Toast.LENGTH_SHORT).show();}})}
}

2.4 EditText(輸入控件)

  • 常用屬性
  • 監聽事件
  • 制作登錄界面

2.4.1 加一個跳轉頁面的按鈕

  • 按鈕樣式: activity_main.xml
<Buttonandroid:id="@+id/btn_edittext"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="EditText"android:textAllCaps="false"/>
  • 按鈕的點擊事件: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.context.Intent;
import android.widget.Button;
import android.view.View;public class MainActivity extends AppCompatActivity {// 聲明buttonprivate Button mBtnEditText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 找到 btn_edittextmBtnEditText = (Button) findViewById(R.id.btn_edittext);mBtnEditText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 跳轉到 EditText 界面// 這里先假設有 EditTextActivityIntent intent = new Intent(MainActivity.this, EditTextActivity.class);startActivity(intent);}});}
}
  • 按鈕的活動頁面: activity_edit_text.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="15dp"><EditTextandroid:id="@+id/et_1"android:layout_width="match_parent"android:layout_height="50dp"android:textSize="16sp"android:textColor="#ffad33"android:hint="用戶名"/><EditTextandroid:id="@+id/et_2"android:layout_width="match_parent"android:layout_height="50dp"android:layout_below="@id/et_1"android:hint="密碼"android:inputType="textPassword"android:layout_marginTop="5dp"/>
</RelativeLayout>
  • 給用戶名輸入框activity_edit_text.xml加樣式
  • 輸入控件如下
<EditTextandroid:id="@+id/et_1"...android:background="@drawable/bg_username"
/>
  • 在res/drawable -> New -> Drawable resource file -> bg_username.xml(shape)
  • 寫入形狀如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><strokeandroid:width="1dp"andorid:color="#999999" /><cornersandroid:radius="5dp"/>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250401.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BZOJ2154: Crash的數字表格 BZOJ2693: jzptab

【傳送門&#xff1a;BZOJ2154&BZOJ2693】 簡要題意&#xff1a; 給出n,m&#xff0c;求$\sum_{i1}^{n}\sum_{j1}^{m}LCM(i,j)$ 題解&#xff1a; 莫比烏斯反演&#xff08;因為BZOJ2693是多組數據&#xff0c;數據強一點&#xff0c;所以代碼用BZOJ2693的&#xff09; 設n…

對于數據庫表排他更新的理解

1. 首先任何應用程序都只能有一個服務端&#xff0c;服務端共享數據給多個客戶端訪問。 (ア) 客戶端從服務端取得相應的數據。 (イ) 或者更新、刪除服務端的內容。 2. 當客戶端A進入服務端方法更新數據庫&#xff0c;服務端方法將被鎖定。其它客戶端在訪問該方法時&#xff0c…

Angular 路由守衛

1. 路由 Angular路由: 可以控制頁面跳轉&#xff1b;可以在多視圖間切換&#xff1b; 2. 路由守衛 Angular路由守衛&#xff1a; 在進入或離開某路由時&#xff0c;用于判斷是否可以離開、進入某路由&#xff1b;&#xff1b;&#xff1b; return true 代表可以進入當前路由&am…

Vue頁面手動刷新,導航欄激活項還原到初始狀態問題解決方案

場景描述&#xff1a;在頁面中存在頂部導航和左側導航&#xff0c;左側導航和右側內容區使用了命名視圖實現&#xff0c;點擊左側導航的鏈接時&#xff0c;右側內容區相應顯示不同組件內容。問題&#xff1a;在當前鏈接手動刷新瀏覽器&#xff08;例如&#xff1a;瀏覽器地址為…

Android Studio --- [學習筆記]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

說明 源代碼在2.x里有TCP的三次揮手與四次握手,先對它進行簡單的回答(百度).預計在下一篇里,會繼續說明TCP接上一篇: Android Studio — > [學習筆記]Button、TextView、EditText 2.5 RadioButton 常用屬性自定義樣式監聽事件 2.5.1 新建按鈕,并跳轉到相應的活動頁面 1.…

洛谷3171 網絡吞吐量(網絡流)

t開成n結果cur賦值的時候也只賦值到t令人智熄 【題目分析】 好吧我承認這個錯誤真的呵呵。。。。。。。。 題目有那~~~~~么長&#xff0c;然后畫畫圖這道題就基本看出正解了&#xff0c;再一看數據范圍&#xff0c;n<500簡直良心&#xff0c;好了&#xff0c;網絡流沒得跑了…

DIV+CSS布局的優勢和弊端

DIVCSS的優勢1、符合W3C標準。這保證您的網站不會因為將來網絡應用的升級而被淘汰。2、對瀏覽者和瀏覽器更具親和力。由于CSS富含豐富的樣式&#xff0c;使頁面更加靈活性&#xff0c;它可以根據不同的瀏覽器&#xff0c;而達到顯示效果的統一和不變形。這樣就支持瀏覽器的向后…

Android Studio --- [學習筆記]TCP(第2彈)、GridView、ScrollView

說明 這篇主要接上一篇Android Studio — > [學習筆記]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手對上面回答的細解,并用JS偽代碼,對TCP三次握手和四次揮手的簡單實現.Android的基本了解到此篇結束,后續會根據具體情況深度學習. 2.y TCP的三次握手和四次揮…

MySQL中varchar最大長度是多少

一. varchar存儲規則&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字節&#xff0c;如果存放UTF8漢字時&#xff0c;只能存6個&#xff08;每個漢字3字節&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;無論存放…

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成樹】

有趣 每條邊在算答案的時候被算了二倍的邊權值加上兩個端點的權值&#xff0c;然后睡覺點額外加一次 所以可以用這個權做MST&#xff0c;然后加上點權最小的點 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N1…

JavaScript --- [學習筆記]觀察者模式 理解對象 工廠模式 構造函數模式

說明 本系列(JS基礎梳理)為后面TCP的模擬實現做準備本篇的主要內容: 觀察者模式、工廠模式、構造函數模式 和 對對象的理解 1. 觀察者模式 參考JavaScript設計模式 1.1 消息注冊方法 “將訂閱者注冊的消息推入到消息隊列中” [算法思路] : 在推入到消息隊列時,如果此消息…

java_day19_MVC和配置文件

簡單的MVC設計 MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;視圖(view)&#xff0d;控制器(controller)的縮寫&#xff0c;是一種軟件設計典范。它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼&#xff0c;將眾多的業務邏輯聚集到一個部件…

Problem I: 打印金字塔

#include<stdio.h> int main() {int n,i,j,k;scanf("%d",&n);for(i1;i<n;i){for(j1;j<n-i;j)printf(" ");for(k1;k<2*i-1;k)printf("*");printf("\n");}return 0; } HINT 用雙重循環做&#xff0c;外循環代表行數&…

webpack --- 發布環境的配置 代碼壓縮 代碼分類

說明 源代碼本篇主要對發布環境的配置說明前面2點是對webpack的一個復習.第3點開始,逐步配置部署代碼 1. Webpack發布的策略 2.1 在實際開發中,一般會有兩套方案: 開發期間的項目:包含了測試文件、測試數據、開發工具、測試工具等相關配置,有利于項目的開發和測試,但是這些文…

salesforce lightning零基礎學習(三) 表達式的!(綁定表達式)與 #(非綁定表達式)

在salesforce的classic中&#xff0c;我們使用{!expresion}在前臺頁面展示信息&#xff0c;在lightning中&#xff0c;上一篇我們也提及了&#xff0c;如果展示attribute的值&#xff0c;可以使用{!v.expresion}展示信息。 lightning在component中解析動態值的時候&#xff0c;…

sqlserver學習3---sql函數

一、SQL DML 和 DDL 可以把 SQL 分為兩個部分&#xff1a;數據操作語言 (DML) 和 數據定義語言 (DDL)。 SQL (結構化查詢語言)是用于執行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。 查詢和更新指令構成了 SQL 的 DML 部分&#xff1a; SELECT - 從數據庫…

JavaScript --- [學習筆記] 原型模式

說明 接JavaScript — > [學習筆記]觀察者模式 & 理解對象 & 工廠模式 & 構造函數模式上一篇構造函數模式創建的實例,不同實例的同一個方法是不相等的,為了解決這個問題.出現了原型模式 1. 原型模式 具體做法是,不在構造函數中定義對象實例的信息,而是將這些…

網絡協議各層概述

網絡協議概述 OSI是一個開放性的通信系統互連參考模型&#xff0c;他是一個定義得非常好的協議規范。OSI模型有7層結構&#xff0c;每層都可以有幾個子層。 OSI的7層從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網絡層 2 數據鏈路層 1 物理層&#xff1b; 其中高層&…

A start job is running for Raise network interface(5min 13s )問題解決方法

命令&#xff1a;sudo vim /etc/systemd/system/network-online.target.wants/networking.service將里面的TimeoutStartSec5min 修改為TimeoutStartSec2sec 然后重啟系統&#xff0c;就可以生效了&#xff0c;開機速度很快 轉載于:https://www.cnblogs.com/sea-stream/p/98615…

javascript --- 實現對象的深拷貝

淺拷貝和深拷貝 淺拷貝: 只拷貝一層.當對象是復雜數據類型(Object、 Array)時,只拷貝引用深拷貝: 多層拷貝.復雜數據類型,會重新分配內存空間. 實現淺拷貝的2種方法 使用for ... in 實現 var obj {name: marron,age: 18,msg: {sex: "1" } } var o {}; for(let …