質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

onCreateメソッドにボタンを設定する記述がどこに入るのか分からない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,212

ippannsimin8

score 11

 前提・実現したいこと

android studioでボタンを押すと文字が変わるアプリを作っています。このサイトをもとに作っています。
https://akira-watson.com/android/button.html
そこにonCreateメソッドにボタンを設定する記述が載っているのですが自分のactivity_main.xmlのtextのどこにそれを入れればいいのか分かりません。

足りない情報があればおっしゃって下さい

onCreateメソッドにボタンを設定する記述のソースコード

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

        // API Level 26 から総称型対応となりました
        // ボタンを設定
        Button button = findViewById(R.id.button);
}

 自分のactivity_main.xmlのtext

<?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="jp.gr.java_conf.enokipro555.button2app.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

 補足情報

android studio3.0

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

今のAndroid StudioはConstraintLayoutというレイアウトが標準になっています。これを用いたデザインの仕方が同じサイトに載っているので、これを参考にしてみてはどうでしょうか。

[Android] ConstraintLayout による制約を設定するには

レイアウトエディター上でButtonコンポーネントをActivityに貼り付ける様子が、アニメーションgifで紹介されています。これに習ってButtonを配置すれば、XMLファイルにその状態が自動的にコーディングされます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/30 17:59

    ConstraintLayout、感覚的でおもしろそうですね。勉強してみます。
    ただ今回質問した記述のソースコードがどこに入るかも理解したいので
    どことどこの間に入るか知りたいです。

    キャンセル

  • 2018/03/31 20:32 編集

    ConstraintLayoutは、「XMLソースを書いてButtonを配置する」のではなく、「GUIによるレイアウトエディターでマウス操作によってButtonを配置したら、それに合わせたXMLソースが自動出力される」という使い方が主体です。GUIによるエディターでコンポーネントを配置したら、その順序によってもButtonタグの記述がどこに来るかは異なってきます。ですから、ご提示いただいたactivity_main.xmlの「この特定の場所」に追加のコードが入るのかという問いに「唯一解」は存在しません。Android Studioをすでに利用できる環境にあるのなら、それを実際に操作してレイアウトエディターButtonを配置し、XMLタブをクリックしてソースがどう変化したかをご自身で視認していただくのが一番かと思うのですが。

    キャンセル

  • 2018/03/31 20:39

    > そこにonCreateメソッドにボタンを設定する記述が載っているのですが自分のactivity_main.xmlのtextのどこにそれを入れればいいのか分かりません。

    という質問の文章を読むと、何か噛み合っていない可能性を感じます。onCreateが存在するのはJavaソースコードです。レイアウトエディターで配置したボタンを操作したときに実行されるコードを記述するのも、Javaソースコードです。先の質問文を見ると、そうしたボタンを操作したときのコードがactivity_main.xmlのどこに入るのか?という内容にも読めるのですが、そうだとしたらJavaソースコードとXMLコードの使い分けを勘違いされているのかもしれません。

    キャンセル

  • 2018/04/03 20:17

    正直、回答すべては理解できませんでしたが、質問がこうと答えられない質問だったのはわかりました。実はまだボタンにアクションを加えることはできていません。自分の中で整理してまた質問すると思うので、ぜひまた回答お願いいたします。ありがとうございました。

    キャンセル

0

ベストアンサーが出ていますが一応回答します。
まずこのプログラムの流れを理解してください。

  1. onCreate()が呼ばれる。
  2. onCreate()内にあるsetContentView()が呼ばれる。 
  3. setContentView()は、その引数与えられたレイアウトファイルを参照する。今回の例ですと、activity_main.xmlを読み込みます。
  4. 読み込んだレイアウトファイルを、Viewに展開する。展開するという表現は正しくなくViewを描画するといったほうが正しいでしょう。この時、onCreate()の中に何があろうが関係なく、activity_main.xmlの内容が読み込まれます。今回ですとTextViewのみが読み込まれるわけですね。
  5. onCreate()setContentView()以降で、レイアウトファイルのViewを参照し、それに対して何らかの設定をする。

大事なのは、4と5です。Viewはレイアウトファイルに書いてください(後々コードを書いているとレイアウトファイルに書かずに生成する方法も知ると思いますが、最初のうちはその必要はありません)。

ですので、今回の例ですと、まだボタンがレイアウトファイルに書かれていないのでボタン自体が存在していません。onCreate()activity_main.xmlは以下のように書き換える必要があります。

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

        // レイアウトファイル内にある、id=my_buttonのviewを参照します。
        Button button = findViewById(R.id.my_button);
        // ここ以降でボタンの設定をします。
}
<?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="jp.gr.java_conf.enokipro555.button2app.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!--- idを指定することで、javaファイルからの参照を可能にします --->
    <!--- レイアウトはご自分で決めてください --->
    <Button
        android:id="@+id/my_button"
        android:layout_width="64dp"
        android:layout_height="64dp" />


</android.support.constraint.ConstraintLayout>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る