FloatingActionButtonを使ったらエラーの嵐だった話
Android で Floating Action Button を使おうとしたら,なぜかうまく動かなかったときの話です.私のケースでは,原因が概ね考えられるものとは全く異なっていましたが,参考までに書き残しておこうと思います.
Floating Action Button の基本的な実装
Floating Action Button が何かについてはマテリアルデザインのサイトを見るのが最もいいと思います.
build.gradle
build.gradle (Module: app)
dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
}
XML
activity_main.xml
<android.support.design.widget.FloatingActionButton
android:id="@+id/floating_action_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
ボタンのデザイン,配置に関する属性に関しては何も書いていません.
Java
MainActivity.java
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup FAB to open ExampleActivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floating_action_button);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ExampleActivity.class);
startActivity(intent);
}
});
ボタンをタップすると ExampleActivity
クラスにインテントするときの処理だけ書いています.
エラーの原因として考えられるもの
上記のように書いておけば,やりがちなミスは防げているようです.依存関係の記述を忘れているとか,継承するクラスが間違っているとか.
これ以外にエラーが発生する原因となりうるのは,AppTheme です.Theme.AppCompat.Light.DarkActionBar
などを指定しておきます.
テーマの指定は values/style.xml
で記述したものを manifests/AndroidManifest.xml
で指定して読み込むのが一般的な書き方になっています.
また,私のケースでは上記のいずれでもなく,ボタンに使用する画像として android:src="@drawable/ic_launcher_foreground"
を指定していたのが問題だったようです.画像を用意してなかったのでテキトーに埋めていたせいです....しかも,書かなくても動作します.
後から気づきましたが,画像だと思って読み込んでいたものは XML でした....