ローエド-色を変えるボタン+トーストをクリック
MainActivity
変更はありません.接続するファイルが
activity_main
でない場合は、そのファイルのみを変更します.package com.techtown.test08;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml
画面構成.作成に必要な
TextView
とButton 화면
.<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/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"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="13dp"
android:text="Hello World" />
<com.techtown.test08.MyButton
android:layout_width="200dp"
android:layout_height="80dp"
android:id="@+id/button"
android:text="확인"
android:layout_centerInParent="true"/>
</RelativeLayout>
Hello World
が設けられ、画面上部の中央にTextView
が表示され、MyButton
ファイルに接続されたスペースも提供される.MyButton.java
これは、必要なコンテンツを正式に作成するjavaファイルです.デフォルト設定の背景色とフォント色があり、押下時(タッチ時)操作の背景色とフォント色を設定します
package com.techtown.test08;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatButton;
public class MyButton extends AppCompatButton {
public MyButton(Context context) {
super(context);
init(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public void init(Context context) {
// 기본 배경 색상
setBackgroundColor(Color.CYAN);
// 기본 글씨 색상
setTextColor(Color.BLACK);
// 글씨 크기 app/res/values 폴더에 dimens.xml 파일 만들고 내용
float textSize = getResources().getDimension(R.dimen.text_size);
// sp 단위로 설정하기 위해 xml 파일을 이용하는 것
setTextSize(textSize);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 로그 호출
Log.d("MyButton", "온 드로우 호출");
}
// 뷰가 터치 되었를 때 호출되는 메소드
@Override
public boolean onTouchEvent(MotionEvent event) {
// 로그 호출
Log.d("MyButton", "온 터치 이벤트 호출");
// event에 action 받기
int action = event.getAction();
switch (action) {
// 눌렸을 때 작동하는 case
case MotionEvent.ACTION_DOWN:
// 배경은 파란색으로
setBackgroundColor(Color.BLUE);
// 글씨는 붉은 색이 된다
setTextColor(Color.RED);
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
setBackgroundColor(Color.CYAN);
setTextColor(Color.BLACK);
break;
}
// 뷰 다시 그리기
invalidate();
return true;
}
}
init
の部分を見ていると、フォントサイズを直接書くのではなく、別途設定ファイルを作成して接続しています.これは、setTextSize()
の方法で設定する場合、画素単位しか設定できないためです.ピクセルの値は固定されているので、画面サイズで表されるsp単位を使用するのが望ましいです.sp単位を使用する場合は、xmlファイルで個別に設定して接続する必要があります.と言います.dimens.xml
フォントサイズをspに設定したファイルを個別に接続するには、対応するファイルを記入する必要があります.前述したように、
res/values
においてファイルが生成される.一行書いても大丈夫です.<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">
20sp
</dimen>
</resources>
実行画面
初めて実行すると、一番上の真ん中に
Hello World
が出ている様子と、真ん中に確認字が入っているブロックが見えます.そして
확인 버튼(?
を押すと色が変わったことが確認できます.クリックして最初の画面に戻りますトーストメッセージ
でもちょっと残念だったのでトースト情報をつけることにしました押すと
버튼이 눌렸습니다
となります検索してみると、思ったより追加方法が簡単だった.
Toast.makeText(getApplicationContext(), "출력하고픈 메시지", Toast.LENGTH_SHORT).show();
ここでSHORTを使うと少し短いLONGだと画面にもっと長く露出します要素の詳細は、次のとおりです.
// context : 안드로이드 시스템에 있는 class와 자원들을 앱 level 까지 올려주는 것
// ex. 액티비티 시작하기, 브로드 캐스팅하기, 인텐트 주고 받기
Context context = getApplicationContext();
// 전송할 text
CharSequence text = "메시지";
// 화면에 얼마나 길게 노출시킬 것인가?
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, durration);
toast.show();
誤り
でもこれはダメ
getApplicationContext()
の部分はいつもおかしいです前に使った時はこれだったみたいですよね?交換しようとしても無理なので検索してみました.Contextには2種類あります
だから、this vs getApplicationContext()?
2つのテキストの
this = activity context
をgetApplicationContext() = application context
と呼びます.そのため、ほとんどの場合、2種類を混ぜて使っても問題はありません.ただし
this
を入れましたが、エラーが発生した場合は、その活動性が正しいかどうかを確認してください.getApplicationContext()
を入れました.だめなら、これを入れます.これもだめだと思います。
this = getBaseContext() = getContext() = Activity Context
getApplicationContext() = getApplication() = Application Context
つまり、
getContext()
を使用したことがあります.使用方法を聞いて、これは対応するアクティブなデバイスに関連付けられていることに気づきました.これは向上した値ではないからです.Toast.makeText(getContext(), "버튼 누름", Toast.LENGTH_SHORT).show();
書き上げる.スイッチ-キャビネットドアのビューが押されている場合に位置します....
switch (action) {
// 눌렸을 때 작동하는 case
case MotionEvent.ACTION_DOWN:
// 배경은 파란색으로
setBackgroundColor(Color.BLUE);
// 글씨는 붉은 색이 된다
setTextColor(Color.RED);
// 토스트 창도 띄워짐
Toast.makeText(getContext(), "버튼 누름", Toast.LENGTH_SHORT).show();
break;
...
実行画面
ボタンを押した場合.ボタンは元の状態に戻り、下にボタンが押された情報が表示され、しばらくして消えてしまった.
Reference
この問題について(ローエド-色を変えるボタン+トーストをクリック), 我々は、より多くの情報をここで見つけました https://velog.io/@cyhse7/안드로이드-누르면-색-바뀌는-버튼-토스트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol