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

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

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

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

Android

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

Q&A

解決済

4回答

2797閲覧

カスタムViewをxmlで作ることはできますか?

akamakku

総合スコア191

Java

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

Android

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

0グッド

0クリップ

投稿2016/11/02 10:23

編集2016/11/02 16:27

AndroidでカスタムViewを作りたくて、ネットで勉強していますが、なかなかわからないことがあります。

Layoutを継承したカスタムViewの上の部品を、xmlで指定しているのは見るんですが、
Viewを継承したカスタムViewでは、xmlで指定しているようなものは見ません。

onDrawで見た目を指定しているものは見るんですが、xmlでしていできないでしょうか?
それとも、onDrawで見た目を描画したものを表示することしかできないんでしょうか?

自分が作りたいカスタムViewは、Buttonの上にTextViewが複数個載っている様なものです。
下に、実際に指定したい配置のxmlの例を載せます。

xml

1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:orientation="vertical" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#ffffaaaa"> 6 <LinearLayout 7 android:layout_width="wrap_content" 8 android:layout_height="wrap_content" 9 android:orientation="horizontal"> 10 <ImageView 11 android:layout_width="5dp" 12 android:layout_height="5dp" 13 android:background="#ffff0000" 14 15 /> 16 <TextView 17 android:layout_width="match_parent" 18 android:layout_height="match_parent" 19 android:text="Title" 20 android:id="@+id/title"/> 21 </LinearLayout> 22 <TextView 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:text="MainText" 26 android:layout_gravity="center" 27 android:id="@+id/mainText" 28 /> 29 <TextView 30 android:layout_width="wrap_content" 31 android:layout_height="wrap_content" 32 android:layout_gravity="bottom|end" 33 android:text="Date" 34 android:id="@+id/date"/> 35</LinearLayout>

(追記)

Java

1public class Custom extends ViewGroup { 2 public Custom(Context context, AttributeSet attrs) { 3 super(context, attrs); 4 inflate(context,R.layout.custum,this); 5 } 6} 7

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

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

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

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

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

guest

回答4

0

自己解決

Java

1public class Custom extends LinearLayout { 2 public Custom(Context context, AttributeSet attrs) { 3 super(context, attrs); 4 LayoutInflater.from(context).inflate(R.layout.custom,this,true); 5 } 6}

投稿2016/11/03 16:27

akamakku

総合スコア191

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

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

0

そもそも 公式で・・・

xml

1<com.google.android.maps.MapView 2 android:layout_width="fill_parent" 3 android:layout_height="fill_parent" 4 android:enabled="true" 5 android:clickable="true" 6 android:apiKey="YOUR_API_KEY"/> 7

あるけどないよね。

投稿2016/11/02 13:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

akamakku

2016/11/02 13:52

すみません。。。 なにがあるけど、なにがないんでしょうか?
退会済みユーザー

退会済みユーザー

2016/11/02 14:02

ん。 カスタムVIEWをXMLで定義しているsampleなんか Googleで公開しているなんてないよねとw ちなみに View └ViewGroup  └LinearLayout
guest

0

ざっくり下記の手順を踏めばできると思いますよ。
・ViewGroupまたはViewを継承したクラスを用意する。
・引数が2つのコンストラクタをオーバーライドする。
・コンストラクタ内でView#inflateを使いXMLを展開する。
・カスタムViewを使いたいxmlでカスタムViewの完全修飾名をタグに使用する。

投稿2016/11/02 12:59

yona

総合スコア18155

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

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

akamakku

2016/11/02 13:30

3つめってこれ(追記)であってるんでしょうか? なぜか表示されないんです。。。
akamakku

2016/11/02 13:31

コンストラクタの名前が違うのは無視でお願いします。
yona

2016/11/02 16:07

そもそもViewは子供を持てないので、ViewGroupを継承してください。
akamakku

2016/11/03 05:34

なるほど! Viewの見た目をXMLで定義できるもんだと思っていましたが、よく考えてみたらムリですよね!笑 すっきりしました!
guest

0

LayoutInflater#inflateメソッドの第3引数にtrueを指定すると、第2引数のViewGroupにXMLのルート要素を適用します。

java

1package com.example.hoge; 2 3import android.widget.LinearLayout; 4import android.content.Context; 5import android.util.AttributeSet; 6import android.view.LayoutInflater; 7 8public class MyLayout extends LinearLayout { 9 public MyLayout(Context context) 10 { 11 super(context); 12 this.init(context); 13 } 14 public MyLayout(Context context, AttributeSet attrs) 15 { 16 super(context, attrs); 17 this.init(context); 18 } 19 public MyLayout(Context context, AttributeSet attrs, int defStyleAttr) 20 { 21 super(context, attrs, defStyleAttr); 22 this.init(context); 23 } 24 public MyLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 25 { 26 super(context, attrs, defStyleAttr, defStyleRes); 27 this.init(context); 28 } 29 private void init(Context context) 30 { 31 LayoutInflater.from(context).inflate(R.layout.my_layout, this, true); 32 } 33} 34

投稿2016/11/02 12:54

katsuko

総合スコア3469

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問