Viewの位置を動的に変える

Pocket

AndroidのTextViewとかLinearLayoutで括ったViewをごそっと移動させる方法が解らなかったのでメモ。
Viewを移動させることでページ遷移に見せかけるというような使い方をしています。

要はJavaのコードの中でViewの位置を再定義しているだけなんですけどね(^_^;)
ボタンを押すとViewの位置が変わるだけという、凄くシンプルなサンプルを張っておきます。

主題と少し離れますが、LinearLayoutでは「android:orientation=”vertical”」という様にorientationを指定してやらないと意味不明な見た目になってしまいます。
これでかなりハマってしまいました(~_~;)

Java

package com.android.sample_app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SampleAppActivity extends Activity {

	Button moveBtn;
	LinearLayout layout;
	TextView helloTxt;
	TextView description;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 要素の取得
        moveBtn = (Button) findViewById(R.id.move_btn);
        layout = (LinearLayout) findViewById(R.id.layout);

    }

    public void move(View v) {

    	int topMargin = 100;

    	layout.layout(0, topMargin, layout.getWidth(), topMargin + layout.getHeight());

    }
}

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="400dip"
    android:layout_height="900dip"
    android:orientation="vertical" >

    <Button
        android:id="@+id/move_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/move_btn" 
        android:onClick="move"
    />

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#123456"
    >
	    <TextView
	        android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
	        android:text="hello"
	    />

	    <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="hello"
        />
    </LinearLayout>

</LinearLayout>

3 Comments

  1. 返信
    amiba 2013年9月19日

    .layoutを指定しても動的に変更できないのですが
    android2.3でも可能なのでしょうか?

    • 返信
      aoi 2013年9月19日

      この記事を書いたとき、2.3で開発していたのでできるはずですー。

  2. 返信
    ebinuma 2013年10月8日

    Viewの移動で調べたらたどり着きました
    ありがとうございます

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください