C50108
Search…
職訓局里程碑
2019/0411/安卓工作室-UI觸發委派函式與控制物件

Java就像c#&js一樣能夠去改動頁面物件與屬性與方法
button1.setText("已經按下");
文本
button1.setBackgroundColor(0);
樣式
button1.setClickable(false);
方法
Layout 與 java 最大的關聯就是物件id
其實兩個是依照
程式設計與介面設計分開分工做事的方式
可以抓到別的介面並不是在顯示的介面的物件id
結果造成執行時就會報錯,造成資源連結失敗

Class 命名時慣例會將第一個字大寫
textView1=(TextView)findViewById(R.id.text_1);
轉型因為回傳值是一個純值
String … 這些變數 是拿來暫存原值用的 ( 字串型態的類別 需要區分大小寫
事件監聽器所定義的抽象方法內實作委派事件處理函式
hasFocus
如果是true則焦點在 textview1這個物件上
Android:focusable=true要設定物件才能真的被選取,有些元件預設是false
TypeValue
工具:用來指定變數值的型態
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.lang.reflect.TypeVariable;
public class Activity_TextView_Java extends AppCompatActivity {
TextView textView1,textView2,textView3;
String text1;
Integer colorText1;
float sizeText3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_textview_java);
textView1=(TextView)findViewById(R.id.text_1);
textView2=(TextView)findViewById(R.id.text_2);
textView3=(TextView)findViewById(R.id.text_2);
text1 = textView1.getText().toString();
colorText1 = textView2.getCurrentTextColor();
sizeText3 = 24.0f;
textView1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){textView1.setText("目前焦點:TextView11111");}
else {textView1.setText(text1);}
}
});
textView2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){textView2.setTextColor(0xff0000ff);}
else {textView2.setTextColor(colorText1);}
}
});
textView3.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){textView3.setTextSize(30);}
else {textView3.setTextSize(TypedValue.COMPLEX_UNIT_SP,sizeText3);}
}
});
}
}

更多方法應用
Visibility 能見度
更多的事件
不同元件事件屬性做到相同的事情也是有可能
有用到再去查(較沒有人去記這些東西
MotionEvent.ACTION_DOWN
手勢.碰觸
Index 1時第一張 2 第二張 …
碰下去就做不同處理
也有其他手勢 ( 液晶螢幕可以多點觸控 其實蠻多的 但模擬器只有滑鼠
可以監聽到多點的值
回傳值 void 為空所以不用 return true false
回傳值boolean 所以最後要 return false 不然會報錯
textView1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
Motionevent event 這個變數代表手勢的動作變數
很多種手勢
package com.example.myapplication;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class Activity_ImageView_Java extends AppCompatActivity {
TextView textView1,textView2;
ImageView image;
Integer imageIndex =0 , scaleIndex =0 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageview_java);
textView1=(TextView)findViewById(R.id.text_1);
textView2=(TextView)findViewById(R.id.text_2);
image=(ImageView)findViewById(R.id.imageview_1);
textView1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == event.ACTION_DOWN){
if(imageIndex==2){
image.setImageResource(R.drawable.imageview_java_1);
imageIndex =1 ;
}else{
image.setImageResource(R.drawable.imageview_java_2);
imageIndex =2 ;}
}
return false;
}
});
}}

View.OnFocusChangeListener()
這個就是 interface 介面
package com.example.myapplication;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class Activity_ImageView_Java extends AppCompatActivity {
TextView textView1, textView2;
ImageView image;
Integer imageIndex = 0, scaleIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imageview_java);
textView1 = (TextView) findViewById(R.id.text_1);
textView2 = (TextView) findViewById(R.id.text_2);
image = (ImageView) findViewById(R.id.imageview_1);
textView1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == event.ACTION_DOWN) {
if (imageIndex == 2) {
image.setImageResource(R.drawable.imageview_java_1);
imageIndex = 1;
} else {
image.setImageResource(R.drawable.imageview_java_2);
imageIndex = 2;
}
}
return false;
}
});
textView2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (scaleIndex == 2) {
image.setScaleType(ImageView.ScaleType.CENTER);
scaleIndex=1;
}
else{image.setScaleType(ImageView.ScaleType.FIT_XY);
scaleIndex=2;}
}
}
});
}
}
CENTER
FIT_XY
差別
補充其他手勢ACTION_DOWN ...

GetText .toString 取出來的值是字串
ParseInt這個方法可以將字串轉為正數

選擇改變觸發短暫秀特定訊息
委派函式都是同一組內容功能
所以改用另外一種方式撰寫
4個按鈕都做同一個委派函式

Copy link
On this page
元件與程式控制 app -> java
介紹能控制的東西
ide 自動設定的類別定義方法產生
除了這個以上都是用匿名寫法callbackmether
重複呼叫必須用具名寫法callbackmether
下集待續