Buttonはボタン入力を受けて、TextViewはTextを表現するときに使用するViewです。もちろん、これらはViewGroupがないので、他のViewの位置を定めることはできません。
通常AndroidはUIをxmlファイルに定義し、Event Handling(イベント処理)は、Javaファイルで行います。 JavaコードでもUIを作成することができますが、柔軟な開発をしようとAndroidは、これを区分しました。今後UIはすべてxmlファイルに 定義すると考えてくださいになりそうで、イベント処理は、Javaでと考えてくださいと思われる。
この章では、以下のような順序でButtonについて調べてみましょう。
- xmlファイルから、ButtonとTextView生成します。
- JavaファイルでUI controlとEvent handling。
プロジェクトを作成する
[File] >> [New] >> [New Project]
でEmpty Activityを選択し、新しいプロジェクトを作成してください。
プロジェクトを作成すると、自動的にMainActivity.javaとactivity_main.xmlファイルが生成されます。
UI生成
/layout/activity_main.xml
でUIを定義することができます。アプリが実行されるFrameworkは、xmlファイルを読むViewオブジェクトを生成します。
基本的に生成された activity_main.xml
を見ればConstraintLayoutの中にTextViewが定義されていますよ。 TextViewの下にButton 2つを生成してみましょう。
以下のようにコードを入力してください。各Viewオブジェクトごとにidを設定したが、Javaで作成されたViewオブジェクトにアクセスするには、idが必要なためです。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="com.codechacha.myapplication.MainActivity">
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_prev"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Prev"
android:layout_margin="3dp"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintRight_toLeftOf="@+id/btn_next"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<Button
android:id="@+id/btn_next"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Next"
android:layout_margin="3dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@+id/btn_prev"
app:layout_constraintBottom_toBottomOf="parent"/>
</android.support.constraint.ConstraintLayout>
ビルドしてアプリを起動してみると、下にボタンが2つ作成されたことを確認することができます。
ConstraintLayoutの Weighted Chain
を利用して、各Buttonのサイズが幅の半々占めるようにしました。
また、TextViewのtextプロパティは、 ""
に設定したため、何も見えません。
ボタンを押してみるとAnimation効果が見えます。基本的には設定されたanimationでcustomして変更することができている部分です。
UI control & Event handling
アプリが実行されるFrameworkはxmlファイルを読んでUIオブジェクトを生成します。 Javaでは、生成されたオブジェクトをcontrolすることができます。 また、ユーザーから受信したInput eventをhandlingできます。
MainActivity.java
を開いてみてください。オブジェクトは、生成された状態であり、Javaでこれを参照して使用する必要があります。
オブジェクト参照をするには、以下のコードのように入力します。
package com.codechacha.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private Button mBtnPrev;
private Button mBtnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.tv_text);
mBtnPrev = (Button) findViewById(R.id.btn_prev);
mBtnNext = (Button) findViewById(R.id.btn_next);
}
}
コードを分析してみると、まずTextViewオブジェクト1つ、Buttonオブジェクトの2つを定義します。
private TextView mTextView;
private Button mBtnPrev;
private Button mBtnNext;
setContentView()は、 activity_main.xml
ファイルを参照して、オブジェクトを生成するという意味です。そして、
findViewById()関数に activity_main.xml
で定義したidをargumentに入力して、オブジェクトを参照することができます。
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.tv_text);
mBtnPrev = (Button) findViewById(R.id.btn_prev);
mBtnNext = (Button) findViewById(R.id.btn_next);
XMLによって生成されたオブジェクトをJavaで参照したら、もう使用するだけです。
簡単に... Butotnが押されたとき、TextViewのtextを変更することを実装してみましょう。次のコードを入力し、結果を確認してみてください。
package com.codechacha.myapplication;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private TextView mTextView;
private Button mBtnPrev;
private Button mBtnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.tv_text);
mBtnPrev = (Button) findViewById(R.id.btn_prev);
mBtnNext = (Button) findViewById(R.id.btn_next);
mBtnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Prev button is pressed");
mTextView.setText("Prev button is pressed");
mTextView.setTextSize(20);
mTextView.setTextColor(Color.BLUE);
}
});
mBtnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Next button is pressed");
mTextView.setText("Next button is pressed");
mTextView.setTextSize(15);
mTextView.setTextColor(Color.RED);
}
});
}
}
Buttonオブジェクトは、listenerを登録することができます。 OnClickListenerを登録すると、Buttonが押されたときcallbackをしてくれます。 もしButtonが押されるとonClick()の関数が1回呼び出されます。
TextView.setText()という関数は、TextViewのtextを変更する関数であり、TextView.setTextSize()は、文字サイズを変更する関数です。 また、TextView.setTextColor()は、textの色を変更する関数です。
mBtnPrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Prev button is pressed");
mTextView.setText("Prev button is pressed");
mTextView.setTextSize(20);
mTextView.setTextColor(Color.BLUE);
}
});
アプリを起動して、ボタンを押してみるとコーディングしたようにtextが入力されました。
ボタンが押されるたびに、ログにも出力されることを確認することができます。
01-08 21:36:37.335 5254-5254/com.codechacha.myapplication D/MainActivity: Prev button is pressed
01-08 21:36:37.873 5254-5254/com.codechacha.myapplication D/MainActivity: Next button is pressed
まとめ
ButtonとTextViewオブジェクトについて簡単に調べてみました。実際、多くの関数がありますが、単純なだけ書いてみました。 他のViewオブジェクトを学ぶとき、他の機能を使用して、見て、知識を広げる良さそうです。
ButtonとTextViewが提供する関数についてもっと知りたい方はAPI Referenceを参照してください。
チュートリアルで使用したコードは、GitHub:Button、TextViewで確認することができます。
参考
Related Posts
- Android - 振動、Vibrator、VibrationEffectの例
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - PackageManagerにPackage情報を取得する
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - Foreground Service実行
- Android - 時間、日付、変更イベント受信
- Android - currentTimeMillis()、elapsedRealtime()、uptimeMillis()
- Android-PowerManager WakeLock
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - Screen On / Offイベントの受信、状態確認
- Android - 他のアプリのServiceにバインド
- Android - Handler vs Executor
- Android - Darkmode有効にする方法
- Android - hasSystemFeature()、サポートされているFeature確認
- Android - アプリの権限を確認(Permission check)
- Android - インストールされてアプリリストをインポートする
- Android App Shortcuts実装
- Android - ContentProviderを実装、および例
- Android - AIDLを利用して、Remote Serviceの実装
- Android - Uri、Scheme、SSP(Scheme Specific Part)説明
- Android - アプリのインストール、削除、イベントダウンロード(BroadcastReceiverインテントを受け取る)
- Android - SharedPreferencesに簡単なデータを保存する方法
- Android - AlarmManagerにアラームを登録する方法、および例
- Android - Quick SettingsにCustom Tile追加する方法(kotlin)
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android - ネットワーク(WIFI)の接続状態を確認し、変更の検出
- Mockito - static、final methodをmockingする方法
- Andriod - カスタムパーミッションを定義する方法
- RobolectricにUnit Testを作成する(kotlin)
- Android Mockitoのテストコードを作成する(kotlin)
- Android - Handlerの使用方法、および例
- Android - IntentService使用方法
- Android - JobIntentService使用方法