Мне нужно масштабировать фоновые изображения TabWidget, чтобы они сохраняли соотношение сторон.
Я использую TabHost с TabWidget. Затем я использую setBackgroundDrawable для установки изображений.
Я нашел здесь подробный ответ - Фон в виджете вкладок игнорирует масштабирование . Однако я не уверен, куда добавить новый код Drawable. (Работая с примером HelloTabWidget, ни один из моих модулей не использует RelativeLayout, и я не вижу никакого макета для «tabcontent».)
Я также нашел эту ветку - Android: масштабировать Drawable или фоновое изображение? . В соответствии с этим, это звучит так, как будто мне пришлось бы предварительно масштабировать свои изображения, что сводит на нет цель сделать их масштабируемыми.
Я также нашел еще один поток, в котором кто-то создал подкласс класса Drawable, чтобы он либо не масштабировался, либо он будет правильно масштабироваться. Я не могу его сейчас найти, но это похоже на то, что нужно пройти МНОГОЕ, когда вы должны просто иметь возможность сделать что-то простое, например mTab.setScaleType (centerInside).
Вот мой код:
main.xml:
основное действие:
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
TabHost changedTabHost = getTabHost();
TabWidget changedTabWidget = getTabWidget();
View changedView = changedTabHost.getTabWidget().getChildAt(0);
public void onTabChanged(String tabId) {
int selectedTab = changedTabHost.getCurrentTab();
TabWidget tw = getTabWidget();
if(selectedTab == 0) {
//setTitle("Missions Timeline");
View tempView = tabHost.getTabWidget().getChildAt(0);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_timeline_on));
tempView = tabHost.getTabWidget().getChildAt(1);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_map_off));
tempView = tabHost.getTabWidget().getChildAt(2);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_search_off));
tempView = tabHost.getTabWidget().getChildAt(3);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_news_off));
tempView = tabHost.getTabWidget().getChildAt(4);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_license_off));
//ImageView iv = (ImageView)tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.icon);
//iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_timeline_on));
//iv = (ImageView)tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.icon);
//iv.setImageDrawable(getResources().getDrawable(R.drawable.tab_map_off));
} else if (selectedTab == 1) {
//setTitle("Spinoffs Around You");
View tempView = tabHost.getTabWidget().getChildAt(0);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_timeline_off));
tempView = tabHost.getTabWidget().getChildAt(1);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_map_on));
tempView = tabHost.getTabWidget().getChildAt(2);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_search_off));
tempView = tabHost.getTabWidget().getChildAt(3);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_news_off));
tempView = tabHost.getTabWidget().getChildAt(4);
tempView.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_license_off));
}
Я также пробовал изображения 9patch, но они оказались слишком маленькими.
Итак, что лучше всего сделать?