タブレット用プログラムの書き止め

android OS & iPadOS の記録。

基礎。自作メッセージボード。ダイアログの代わり。

2021-11-19 23:15:19 | Android studio 日記

警告などを表示してボタンを押して閉じる。状況によって複数のボタンを表示して選択もさせる。
単純な内容なのでアラが目立つ。他の操作を遮断するのにonTouch()、onClick() を( Layout.getVisibility() == View.VISIBLE ) でスルー判断させなければならない。

とりあえず、何ができて、どんな問題が起こるのかを知るための基礎。

メッセージボードのデザインをする。
@id/message_layout を setVisibility( View.GONE )、setVisibility( View.VISIBLE )すれば、非表示、表示を切り替えられる。そして、ボタンの代わりとなる TextView も setVisibility() で必要に応じて使う選択肢の数を変えられる。用意したボタンは3個、メソッドの引数でボタン1個表示、2個表示を切り替えている。ボタン上の文字も変更できる。

 

【activity_main.xml】

< ?xml version="1.0" encoding="utf-8"?>
< ConstraintLayout

    < ConstraintLayout
        android:id="@+id/message_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" >

        < TextView
            android:id="@+id/message_text"
            android:layout_width="400dp"
            android:layout_height="wrap_content"
            android:maxLines="6"
            android:textSize="24sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        < LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintStart_toStartOf="@id/message_text"
            app:layout_constraintEnd_toEndOf="@id/message_text"
            app:layout_constraintTop_toBottomOf="@id/message_text" >

            < TextView
                android:id="@+id/key_done"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="24sp"
                android:text="done" />

            < TextView
                android:id="@+id/key_accepted"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="24sp"
                android:text="accepted" />

            < TextView
                android:id="@+id/key_cancel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="24sp"
                android:text="cancel" />

        </ LinearLayout>
    </ ConstraintLayout>
</ ConstraintLayout>

 

 

骨子。色々と肉付けが必要。また、onClick()処理は、複数のメッセージに対応させるため、分岐処理を組み込む。

【MainActivity.java】


    private ConstraintLayout mMessageLayout;
    private TextView mMessageTextView, mAcceptedTextView, mCancelTextView, mDoneTextView;
    private final View.OnClickListener mMessageClick;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMessageClick  = new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                switch (v.getId()) {
                    case R.id.key_done:
                        mMessageLayout.setVisibility( View.GONE );
                        break;
                    case R.id.key_accepted:

                        break;
                    case R.id.key_cancel:

                        break;
                }
            }
        };


        mMessageLayout = (ConstraintLayout)findViewById( R.id.message_layout );
        mMessageTextView = (TextView) findViewById( R.id.message_text ); // メッセージ
        mAcceptedTextView = (TextView) findViewById( R.id.key_accepted ); // ボタン 1
        mCancelTextView = (TextView) findViewById( R.id.key_cancel ); // ボタン 2
        mDoneTextView = (TextView) findViewById( R.id.key_done ); // ボタン 3

        mAcceptedTextView.setOnClickListener( mMessageClick );
        mCancelTextView.setOnClickListener( mMessageClick );
        mDoneTextView.setOnClickListener( mMessageClick );

    }

    public void onMessageBoard() { mMessageLayout.setVisibility( View.VISIBLE ); }
    public void offMessageBoard() { mMessageLayout.setVisibility( View.GONE ); }
    public boolean isMessageBoard() { return ( mMessageLayout.getVisibility() == View.VISIBLE ); }

    public void myMessage( String text ) { // メッセージのみは、ボタン1個表示。
        mDoneTextView.setVisibility( View.VISIBLE );
        mAcceptedTextView.setVisibility( View.GONE );
        mCancelTextView.setVisibility( View.GONE );
        mDoneTextView.setText( "done" );
        mMessageTextView.setText( text );
        mMessageLayout.setVisibility( View.VISIBLE );
    }
    public void myMessage( String text, String accepted, String cancel ) { 
        mDoneTextView.setVisibility( View.GONE );
        mAcceptedTextView.setVisibility( View.VISIBLE );
        mCancelTextView.setVisibility( View.VISIBLE );
        mMessageTextView.setText( text ); // メッセージ
        mAcceptedTextView.setText( accepted ); // ボタンの文字設定
        mCancelTextView.setText( cancel ); // ボタンの文字設定
        mMessageLayout.setVisibility( View.VISIBLE );
    }

引数の型が違う、数が違うで処理内容を判断する。
ボタンの数が同じで処理が異なる場合は、モード、IDを加えて分岐処理をさせる。

isMessageBoard()の戻り値が true ならメッセージが開いているので、他のタッチイベント、オンクリック処理はスルーさせる。

骨子なので肉付けしないと動かない?。実物は服も着せてるので問題ない状態。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする