PG備忘録

プログラミングいろいろ

長押しでメニュー表示+フォントのカスタマイズ

初期画面
f:id:olee46:20170621034951j:plain:h300

メニュー表示画面
f:id:olee46:20170621034955j:plain:h300

機能

  • TextViewの表示
  • TextView長押し → メニュー表示

ポイント

長押しでメニュー表示する

  • registerForContextMenu(View view)
  • onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
  • onContextItemSelected(MenuItem item)

の3つのメソッドを使う(詳細はコード参照)
techbooster.org

フォントのカスタマイズ

f:id:olee46:20170621034958j:plain:h300
Projectビューにする → app > mainの下にassetsフォルダを作る → ttfファイルを追加

背景色を動的に指定

tv.setBackgroundColor(Color.parseColor("#FFD740"));

www.javadrive.jp

必要なファイル

activity_main.xml

f:id:olee46:20170621035001j:plain:h300

<?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="com.example.orisa.mymenu1.MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_margin="10dp"
        android:elevation="3dp"
        android:fontFamily="casual"
        android:padding="10dp"
        android:text="資料を作る"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</RelativeLayout>

MainActivity.java

package com.example.orisa.mymenu1;

import android.graphics.Color;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    //ContextMenu用の定数
    static final int MENU_ID_EDIT = 0;
    static final int MENU_ID_DELETE = 1;

    TextView tv;

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

        tv = (TextView)findViewById(R.id.tv);
        //背景色を指定
        tv.setBackgroundColor(Color.parseColor("#FFD740"));

        registerForContextMenu(tv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        //Menuに項目を追加する
        menu.add(0, MENU_ID_EDIT, 0, "edit");
        menu.add(0, MENU_ID_DELETE, 0, "delete");
    }

    //Menuの項目をクリックしたときの動作
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case MENU_ID_EDIT:
                Toast.makeText(MainActivity.this, "edit", Toast.LENGTH_SHORT).show();
                return true;
            case MENU_ID_DELETE:
                Toast.makeText(MainActivity.this, "delete", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }
}