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

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

ただいまの
回答率

90.47%

  • Android

    6632questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3791questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Viewを上下に分割表示をさせたい、layout_1、layout_2のどちらかしか表示されない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 208

theq

score 12

今日は、Viewの表示に関する質問です、宜しくお願いします。
Androidで Viewを上下に分割表示をさせたいと考え、
(layout_1の下側にlayout_2を張り付ける?)
他のサイトも色々と参考にしながら、「setContentView(  )」と
「、addContentView(  )」メソッドを使って、コードを書きまし
たが、うまく表示されません。

layout_1、layout_2のどちらかしか表示されません。

文法的にはエラ―は出ていないのですが、何が原因かが分かりません。
詳しい方、宜しくお願い致します。
また、Full画面表示にしたいのですが、どうもタイトルが
画面表示されます。
この原因もわかりません、宜しくお願いします。


public class MainActivity extends AppCompatActivity
{
private TextView textView ;
@Override
protected void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState ) ;
//Full画面の設定
getWindow().addFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN ) ;
requestWindowFeature( Window.FEATURE_NO_TITLE ) ;
// リニアレイアウトの設定
LinearLayout layout_1 = new LinearLayout( this ) ;
// orientationは垂直方向
layout_1.setOrientation( LinearLayout.VERTICAL);
// Layoutの横・縦幅の指定
layout_1.setLayoutParams
(
//LayoutParamsの設定(その1)
new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.MATCH_PARENT ,
LinearLayout.LayoutParams.MATCH_PARENT
)
) ;
layout_1.setBackgroundColor( Color.rgb( 0xdd , 0xff , 0xee ) ) ;
//このクラスに Layoutを引数にして ContentViewをsetする
setContentView( layout_1 ) ;
// textView設定
textView = new TextView( this ) ;
textView.setBackgroundColor( Color.GREEN ) ;
textView.setText( "hello" ) ;
textView.setTextSize( 35 ) ;
textView.setTextColor( Color.RED ) ;
//textLayoutParamsの設定
textView.setLayoutParams
(
new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
layout_1.addView( textView ) ;
// ボタンの設定
Button button = new Button( this ) ;
button.setBackgroundColor( Color.MAGENTA ) ;
button.setWidth( 800 ) ;
button.setText( "button" ) ;
button.setTextColor( Color.BLUE ) ;
button.setTextSize( 45 ) ;
button.setLayoutParams
(
new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
layout_1.addView( button ) ;
//--View _2  layout_2--------------------
// リニアレイアウトの設定
LinearLayout layout_2 = new LinearLayout( this ) ;
// orientationは垂直方向
layout_2.setOrientation( LinearLayout.VERTICAL);
// Layoutの横・縦幅の指定
layout_2.setLayoutParams
(
//LayoutParamsの設定(その1)
new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
layout_2.setBackgroundColor( Color.CYAN ) ;
//このクラスに Layoutを引数にして ContentViewをsetする
this.addContentView( layout_2 , new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
Button button2 = new Button( this ) ;
button.setBackgroundColor( Color.YELLOW ) ;
button.setWidth( 800 ) ;
button.setText( "button2" ) ;
button.setTextColor( Color.BLUE ) ;
button.setTextSize( 45 ) ;
button.setLayoutParams( new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
layout_2.addView( button2 ) ;
Button button3 = new Button( this ) ;
button.setBackgroundColor( Color.RED ) ;
button.setWidth( 1200 ) ;
button.setText( "button3" ) ;
button.setTextColor( Color.BLUE ) ;
button.setTextSize( 70 ) ;
button.setLayoutParams
(
new LinearLayout.LayoutParams
(
LinearLayout.LayoutParams.WRAP_CONTENT ,
LinearLayout.LayoutParams.WRAP_CONTENT
)
) ;
layout_2.addView( button3 ) ;
}

}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • keicha_hrs

    2018/06/14 13:45 編集

    質問入力フォームの<code>というボタンを押すと、コード修飾用のMarkdownの雛形が出てきます。「コード」と表示された部分にソースコードを記述してください。「ここに言語を入力」はその言語(ここではJava)に書き換えてください。コード用修飾をかければ、左詰めにされずインデントをつけて表示できます。すべて左詰めでは閲覧する方も非常に見づらいです。

    キャンセル

回答 1

checkベストアンサー

0

どうもタイトルが画面表示されます。

AppCompatActivityを用いているので、アクションバーの操作もそれ用のsupportRequestWindowFeatureを用いる必要があります。

    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

layout_1、layout_2のどちらかしか表示されません。

これは2つのLayoutで構成しようとせず、外枠を司るlayout_1と、そのlayout_1の内側に均等配置するlayout_2とlayout_3という、3つのLayoutで構成するようにすればいいのでは。addContentView()はレイアウトの重ね合わせ表示のためのメソッドなので、これでは均等配置はできないでしょう。

レイアウトの部分についてだけ記せば、

        // リニアレイアウトの設定
        LinearLayout layout_1 = new LinearLayout(this);
        // orientationは垂直方向
        layout_1.setOrientation(LinearLayout.VERTICAL);
        // Layoutの横・縦幅の指定
        layout_1.setLayoutParams(
                //LayoutParamsの設定(その1)
                new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT
                )
        );
        //このクラスに Layoutを引数にして ContentViewをsetする
        setContentView(layout_1);

        //--View _1  layout_2--------------------
        // リニアレイアウトの設定
        LinearLayout layout_2 = new LinearLayout(this);
        // orientationは垂直方向
        layout_2.setOrientation(LinearLayout.VERTICAL);
        layout_2.setLayoutParams(
                //LayoutParamsの設定(その1)
                new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        1.0f  // 比率
                )
        );
        layout_2.setBackgroundColor(Color.rgb(0xdd, 0xff, 0xee));
        layout_1.addView(layout_2);

        //--View _2  layout_3--------------------
        // リニアレイアウトの設定
        LinearLayout layout_3 = new LinearLayout(this);
        // orientationは垂直方向
        layout_3.setOrientation(LinearLayout.VERTICAL);
        // Layoutの横・縦幅の指定
        layout_3.setLayoutParams(
                //LayoutParamsの設定(その1)
                new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        1.0f  // 比率
                )
        );
        layout_3.setBackgroundColor(Color.CYAN);
        layout_1.addView(layout_3);

のような感じで、layout_2およびlayout_3にはLinearLayout.LayoutParams()の第3引数として比率を設定します。今回は均等なので1:1ですね。数値を変えれば、1:2とかもできます。

このlayout_2およびlayout_3をlayout_1にaddView()します。後は、ボタンやテキストをlayout_2やlayout_3にaddView()していけば、想定通りになると思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/15 12:56

    keicha_hrsさん、回答有り難う御座います。

    何とかうまく表示させることが出来ました。

    ところで
    >AppCompatActivityを用いているので、・・・・・
    とありましたが、

    「//requestWindowFeature(Window.FEATURE_NO_TITLE);」を使うときには、
    どのクラスを継承した場合なのでしょうか。

    もう一点の質問ですが、
    >addContentView()はレイアウトの重ね合わせ表示のためのメソ
    ッドなので、これでは均等配置はできないでしょう。

    # addContentView()は具体的には、どのような場合に使用するのでしょうか。

    以上、宜しくお願い致します。

    キャンセル

  • 2018/06/15 18:22

    > どのクラスを継承した場合なのでしょうか。
    単なるActivityです。requestWindowFeature()も、Activityクラスのメソッドです。対して、AppCompatActivityはSupport Libraryによって提供される機能です。android.supportから始まるパッケージ名で提供される機能は全てSupport Libraryによるものです。FragmentやToolbarなども同様ですが、Support Libraryによるオブジェクトを操作するには、それ用のメソッドを用いなければ同じようにアプリが落ちます。

    addContentView()は有効に使ったことがないので、どういう場面で有用なのかはよくわかりません。

    キャンセル

  • 2018/06/18 11:28

    keicha_hrsさん、回答有り難う御座いました。

    キャンセル

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

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

関連した質問

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

  • Android

    6632questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    3791questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。