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

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

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

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

Q&A

解決済

1回答

1667閲覧

Android tablayout カスタマイズ

WestField

総合スコア18

Android

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

0グッド

1クリップ

投稿2018/08/22 05:47

Androidのtablayoutを使用してスマートニュースのような画面を作りたいと考えています。

private

1 mPager = (ViewPager) findViewById(R.id.viewpager); 2 mPager.setAdapter(new NewsCategoryPageAdapter(getSupportFragmentManager(), ListnewsActivity.this, "")); 3 4 mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 5 @Override 6 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 7 8 } 9 10 @Override 11 public void onPageSelected(int position) { 12 util.log(TAG, "SelectTab:" + position); 13 } 14 15 @Override 16 public void onPageScrollStateChanged(int state) { 17 18 } 19 }); 20 21 TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 22 tabLayout.setupWithViewPager(mPager); 23 24 mCategory = session.getCategoryList(); 25 LinearLayout tabsContainer = (LinearLayout) tabLayout.getChildAt(0); 26 27 for(int i = 0; i < mCategory.size(); i++) { 28 LinearLayout childLayout = (LinearLayout) tabsContainer.getChildAt(i); 29 LinearLayout tabView = (LinearLayout) childLayout.getChildAt(0).getParent(); 30 31 Drawable drawable = tabView.getBackground(); 32 33 String color = mCategory.get(i).getColor(); 34 //drawable.setColorFilter(Color.parseColor(color), PorterDuff.Mode.SRC_ATOP); 35 drawable.setTint(Color.parseColor(color)); 36 37 tabView.setBackground(drawable); 38 39 util.log(TAG, "TabHeight: " + tabView.getHeight()); 40 } 41 } 42コード

現在はViewPagerで個々のタブ色とページの切り替えは出来るようになっています。
が、タブを選択した時に未選択のタブよりも一段高くしたいと考えておりますが、どうしても出来ません。

そもそもtabLayoutをしよすると個々のタブで高さを変えるなど出来ないのでしょうか?

お知恵をお貸し頂ければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TabLayoutのアイテムにはカスタムレイアウトを使用できるので、柔軟なカスタマイズが可能です。これを利用して選択時に余白サイズを切り替えるViewを実装すれば実現可能です。

java

1TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 2tabLayout.setupWithViewPager(mPager); 3 4// カスタムレイアウトを各タブに設定 5for (int i = 0; i < tabLayout.getTabCount(); ++i) { 6 tabLayout.getTabAt(i).setCustomView(R.layout.tab_item); 7}
  • res/layout/tab_item.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<xxx.widget.TabItemLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 > 8 <TextView 9 android:id="@android:id/text1" 10 android:layout_width="wrap_content" 11 android:layout_height="match_parent" 12 android:layout_gravity="center" 13 android:gravity="center" 14 /> 15</xxx.widget.TabItemLayout>
  • TabItemLayout.java

java

1// 選択状態により余白サイズを切り替えるViewの実装例 2class TabItemLayout extends LinearLayout { 3 4 // コンストラクタ... 5 6 @Override 7 public void setSelected(boolean selected) { 8 super.setSelected(selected); 9 10 LayoutParams params = getLayoutParams(); 11 if (params instanceOf MarginLayoutParams) { 12 if (selected) { 13 ((MarginLayoutParams) params).topMargin = 0; 14 } else { 15 ((MarginLayoutParams) params).topMargin = 10; 16 } 17 } 18 setLayoutParams(params); 19 } 20}

投稿2018/08/23 02:11

編集2018/08/23 02:14
kakajika

総合スコア3131

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

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

WestField

2018/08/24 23:01

ありがとう御座います。 大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問