> For the complete documentation index, see [llms.txt](https://johch3n611u.gitbook.io/c50108/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://johch3n611u.gitbook.io/c50108/ju-li-cheng-bei/201904/20190411-an-zhuo-gong-zuo-shi-ui-wei-pai-han-shi-kong-zhi-wu-jian.md).

# 2019/0411/安卓工作室-UI觸發委派函式與控制物件

## 元件與程式控制 app -> java

Java就像c#\&js一樣能夠去改動頁面物件與屬性與方法

button1.setText("已經按下");

文本

button1.setBackgroundColor(0);

樣式

button1.setClickable(false);

方法

Layout 與 java 最大的關聯就是物件id&#x20;

其實兩個是依照

程式設計與介面設計分開分工做事的方式

可以抓到別的介面並不是在顯示的介面的物件id

結果造成執行時就會報錯，造成資源連結失敗

### 介紹能控制的東西&#xD;

#### onfocuschange 焦點方法&#xD;

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y-oJxOynjO5Wew%2Fimage.png?alt=media\&token=949a5610-8d8e-49da-92a6-a273f5625f03)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y0gnXUU71jm49H%2Fimage.png?alt=media\&token=e7c0157f-f8e9-493a-b4ed-7c42955b0be1)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y1tk7bZt1zxr58%2Fimage.png?alt=media\&token=354e1df3-48f5-49db-9c4a-7fa0832596a1)

Class 命名時慣例會將第一個字大寫

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y2nuR73vwrkCLp%2Fimage.png?alt=media\&token=a331abb1-4994-46c9-8f20-7c242d0c1da6)

```
textView1=(TextView)findViewById(R.id.text_1);
```

轉型因為回傳值是一個純值

String … 這些變數 是拿來暫存原值用的 ( 字串型態的類別 需要區分大小寫

事件監聽器所定義的抽象方法內實作委派事件處理函式

hasFocus

如果是true則焦點在 textview1這個物件上

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y3lkIhvH79w921%2Fimage.png?alt=media\&token=73a8f402-b328-4774-94d9-f82b7469c5e6)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y4_h1LVo7sZLnv%2Fimage.png?alt=media\&token=70766e09-9a41-4257-982f-91d0f3197e9e)

Android:focusable=true要設定物件才能真的被選取，有些元件預設是false

TypeValue

工具:用來指定變數值的型態

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y5GUFiUm9fW8kD%2Fimage.png?alt=media\&token=4cca53ac-a591-4da1-9490-1dc2344b3f6d)

```
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);}

            }
        });


    }


}

```

#### 類似邏輯的實現，點擊右上角qrcode轉換再轉回

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y6yMZ6dWvngiVj%2Fimage.png?alt=media\&token=171bc7e5-5213-4bd3-802a-47c87994f679)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y7X7jWfgzbX8Vw%2Fimage.png?alt=media\&token=484c1d01-e38f-4ab5-be08-04498c786d32)

更多方法應用

Visibility 能見度

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y8cR1AhW-GTjWe%2Fimage.png?alt=media\&token=fe74499a-884c-4a60-a92d-90b0c84d7a15)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4y9SP92SijD_2cn%2Fimage.png?alt=media\&token=22fbf89d-dbef-4fc4-bdf7-97657d2c9bac)

更多的事件

不同元件事件屬性做到相同的事情也是有可能

有用到再去查(較沒有人去記這些東西

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yA93hwDMP8G2ol%2Fimage.png?alt=media\&token=02235caf-bcd5-4482-957a-a5c441825558)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yB7l8Uf0QMECSM%2Fimage.png?alt=media\&token=d4ec642b-d319-45b1-831e-82302e1b206a)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yCjtRWDQCrytB0%2Fimage.png?alt=media\&token=69de8139-c261-4337-b58f-31ab7fe6a51d)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yDkxEDZrrjfSrY%2Fimage.png?alt=media\&token=88a81847-2671-4a1f-b1b7-d6282c824499)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yENenDqDbROqUU%2Fimage.png?alt=media\&token=327d9064-2468-430c-a0bb-7bef3c24f2ec)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yFWjY6M-GWiwBf%2Fimage.png?alt=media\&token=b749b4eb-8d43-4a3d-86ae-8458513fa719)

MotionEvent.ACTION\_DOWN&#x20;

手勢.碰觸

Index 1時第一張 2 第二張 …

碰下去就做不同處理

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yGdfqfKlKt-Bi-%2Fimage.png?alt=media\&token=2250f503-d7a4-41ac-9b80-47c73d5247f3)

也有其他手勢 ( 液晶螢幕可以多點觸控 其實蠻多的 但模擬器只有滑鼠

可以監聽到多點的值

回傳值 void 為空所以不用 return true false

回傳值boolean 所以最後要 return false 不然會報錯

```
textView1.setOnTouchListener(new View.OnTouchListener() {
    @Override
public boolean onTouch(View v, MotionEvent event) {       
return false;
    }
});
```

Motionevent event 這個變數代表手勢的動作變數

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yHWkhEuFOtzT3_%2Fimage.png?alt=media\&token=d1fe7d43-25de-4da0-9091-24c0429ee46f)

很多種手勢

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yI2sm4np6wncKC%2Fimage.png?alt=media\&token=e923a8f3-825c-4a78-aea1-300c740409ff)

```
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;
          }
      });


}}

```

### ide 自動設定的類別定義方法產生

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yJKLI7sYswreSC%2Fimage.png?alt=media\&token=432a7aac-1000-43d9-a476-d14b5c82fc59)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yKQPMZKxyZe05T%2Fimage.png?alt=media\&token=d7050b8e-ab8b-4a5a-b165-fac2a766b01e)

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&#x20;

FIT\_XY

差別

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-LcB5RrjEwEXUsWoX5Wm%2F-LcB7uvltgYJS9-Iu_hG%2Fimage.png?alt=media\&token=d0c281ca-c14d-411b-8130-1706e5091bd9)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yLjxHzfEcPGIR-%2Fimage.png?alt=media\&token=ea8bd2fb-a1a3-49a9-988f-2f42c0f4585b)

補充其他手勢ACTION\_DOWN ...

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yMaWp919d2XrW0%2Fimage.png?alt=media\&token=f9dac694-0321-4fb4-9a27-4730d49cb181)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yNymCzm3_eXTj_%2Fimage.png?alt=media\&token=eb435b2c-a485-42b4-96b9-9175af1b63c5)

#### edittext

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yODltC2mjG3rlG%2Fimage.png?alt=media\&token=fae3b659-2b2a-4a49-af64-53856dfd2d41)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yPdJRMvasVh5qo%2Fimage.png?alt=media\&token=d927a426-3681-4ca9-ae07-63cac0fb2e65)

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yQpkpcMQVSPGkf%2Fimage.png?alt=media\&token=30b99a49-2c85-40de-8019-cb7125561b17)

GetText .toString 取出來的值是字串

ParseInt這個方法可以將字串轉為正數

#### Checkbox&#xD;

選擇改變觸發短暫秀特定訊息

![](https://1902678905-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LVJQfuBXyvHwCd1Nadk%2F-Ld8V4xz2r6R5I8k_STQ%2F-Ld8V4yRGxOT0YxoNXK3%2Fimage.png?alt=media\&token=2baa3a2f-4489-4020-99a5-b8f1619adb01)

委派函式都是同一組內容功能

所以改用另外一種方式撰寫

４個按鈕都做同一個委派函式

### 除了這個以上都是用匿名寫法ｃａｌｌｂａｃｋｍｅｔｈｅｒ&#xD;

### 重複呼叫必須用具名寫法ｃａｌｌｂａｃｋｍｅｔｈｅｒ&#xD;

### 下集待續&#xD;
