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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

Q&A

解決済

1回答

961閲覧

RelativeLayout.LayoutParamsのMarginについて

Shibou

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

0グッド

0クリップ

投稿2020/04/17 09:21

MainActivityでTextViewを継承したPieceクラスを
表示しようとしたのですが、LayoutParams.Marginのところ
でアプリが落ちてしまいます。
MarginLayoutParamsも試したのですが、同じ結果になりました。
どうすれば落ちずに画面を表示できるのかを
ご教授いただければ幸いです。

Pieceクラス
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class Piece extends TextView {

private String pieceName; private int pieceType ; private int pieceWidth; private int pieceHeight; private int posX; private int posY; private int gridSize = 64; private int imgId; RelativeLayout.LayoutParams lp; public Piece(Context c,int type,int x,int y){ super(c); //タイプによって変わる値 pieceType = type; switch(pieceType){ case 0: pieceName = ""; pieceWidth = 1; pieceHeight = 1; imgId = 0; break; case 1: pieceName="父"; pieceHeight=2; pieceWidth=1; imgId=R.drawable.father; break; case 2: pieceName="母"; pieceHeight=2; pieceWidth=1;

         imgId=R.drawable.mother;
break;
}
//初期位置
posX = x;
posY = y;

lp = (RelativeLayout.LayoutParams)this.getLayoutParams(); //ここで落ちます。 if(x!=0){ lp.leftMargin = posX * gridSize; } if(y!=0){ lp.topMargin = posY * gridSize; } if(lp!=null){ this.setLayoutParams(lp); } //名前 this.setText(pieceName); this.setBackgroundResource(imgId); //共通のパラメータ this.setGravity(Gravity.RIGHT|Gravity.BOTTOM); this.setTextSize(12); this.setTextColor(Color.BLACK); if(pieceType ==0){ this.setBackgroundColor(Color.GRAY); }else{ this.setBackgroundColor(Color.rgb(255,153,0)); } this.setVisibility(View.VISIBLE); }

}

MainActivityクラス

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Gravity;
import android.widget.RelativeLayout;

import java.util.Vector;

public class MainActivity extends AppCompatActivity {

private Vector<Piece>p = new Vector<Piece>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout r = new RelativeLayout(this); r.setGravity(Gravity.CENTER); setContentView(r); initialize(); //すべてのViewを追加 for(int i= 0;i<4;i++){ r.addView(p.get(i)); } } private void initialize() { p.add(0,new Piece(this,1,0,0)); p.add(1,new Piece(this,2,3,0)); p.add(10,new Piece(this,0,1,4)); p.add(11,new Piece(this,0,2,4)); }

}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keicha_hrs

2020/04/17 09:50

ソースコードは専用修飾をかけてください。エディタで<code>ボタンを押せば雛形が出てきます。```の行で上下挟むようにソースコードを記述してください。それによって左側のインデントも有効になります。すべて左詰めのソースコードは見る側にとって苦痛でしかないので、回答も付きづらいでしょう。
jimbe

2020/04/17 09:56

> LayoutParams.Marginのところでアプリが落ちてしまいます その時 Logcat にはどのような例外(スタックトレース)が表示されているでしょうか. ご質問に追加でスタックトレース全文をご提示願えますか.
guest

回答1

0

ベストアンサー

new Piece() した場合、LayoutParams の初期値は null なので自分で new する必要があります。
また、LayoutParams の実際の型は親となる ViewGroup に応じて変更する必要がありますので、Piece クラスの中で決め打ちするのはあまりよくないです。理論上は ViewGroup によっては margin がない場合もありえますし。

diff

1-lp = (RelativeLayout.LayoutParams)this.getLayoutParams(); 2+lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

投稿2020/04/17 10:10

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shibou

2020/04/20 01:41

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問