ImageButton
Android StudioでImageButtonで実装したサンプルです。
package test.example.com.test26;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//クリックイベント用に追加
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
int iNo = 0;
iNo = 1;
if(iNo == 0 )
{
//通常のボタン
test1();
}
else
{
//ImageButton
test2();
}
}
//通常のボタン
private void test1()
{
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
int x=0;
int y=0;
int width=0;
int height=0;
//配置を設定
x=100;
y=50;
width=200;
height=80;
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
Button btn=new Button(this);
btn.setText("てすと");
layout.addView(btn);
}
//ImageButton
private void test2()
{
//相対的レイアウトでベースを作成します
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
//変数宣言
int x=0;
int y=0;
int width=0;
int height=0;
//ボタンの位置を設定
x=100;
y=50;
width=200;
height=80;
//ボタンのレイアウトを準備
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
//ボタンをインスタンス化
ImageButton btn = new ImageButton(this);
//画像をBitmapで使用するためリソースを準備します。
Resources res = getResources();
//Bitmapに使用するリソースIDを指定します
Bitmap bitmap=BitmapFactory.decodeResource(res, R.mipmap.icon_50);
//Bitmapをボタンに表示するイメージとして設定します
btn.setImageBitmap(bitmap);
//ボタンに画像がフィットするようにパラメータを設定します
btn.setScaleType(ImageView.ScaleType.FIT_XY);
//背景色
//※背景色を指定しない場合はボタンのデフォルトの色のグレーになります。
btn.setBackgroundColor(Color.BLUE);
//クリックイベントを設定します
btn.setOnClickListener(this);
//レイアウトにボタンを設置します
layout.addView(btn,obj1);
}
@Override
//ボタンがクリックされたら実行されます。
public void onClick(View view) {
//Dummy
Log.d("onClick","course in!!");
}
//レイアウトを決定するオブジェクトを生成し渡します
private RelativeLayout.LayoutParams getLayoutObject(int width, int height)
{
return new RelativeLayout.LayoutParams(width, height);
}
}
|
「setImageResource」を使用した例
//相対的レイアウトでベースを作成します
RelativeLayout layout = new RelativeLayout(this);
setContentView(layout);
//変数宣言
int x=0;
int y=0;
int width=0;
int height=0;
//ボタンのレイアウトを準備
RelativeLayout.LayoutParams obj1 = getLayoutObject(width, height);
//ボタンの位置を設定
x=100;
y=50;
width=200;
height=80;
obj1 = getLayoutObject(width, height);
obj1.leftMargin=x;
obj1.topMargin=y;
ImageButton btn = new ImageButton(this);
btn.setImageResource(R.mipmap.icon_50);
btn.setOnClickListener(this);
layout.addView(btn,obj1);
ちなみに下記エラーが表示される場合は
レイアウトにaddViewで設置する前に親ViewGroupが存在している場合は削除するといいらしいです。
(エラー例)
java.lang.RuntimeException: Unable to start activity ComponentInfo
{場所}:
java.lang.IllegalStateException:
The specified child already has a parent. You must call removeView() on the child's parent first.
(実装例)
ViewGroup viewgroup = (ViewGroup)layout.getParent();
if(viewgroup != null)
{
//viewgroup.removeView(layout);
viewgroup.removeAllViews();
}
実行結果
左側が背景色を指定し、右側が背景色を指定しないケースです。
|
|