Макет вкладки Android - изменить размер - PullRequest
0 голосов
/ 29 декабря 2011

Я разрабатываю приложение с таблицей. Мой дизайн отлично смотрится на устройствах с большим экраном, но на fx. HTC Wildfire, вкладка занимает почти 1/3 экрана.

Если я сделаю вкладку меньшего размера в файле макета для устройств с небольшим экраном, мое изображение исчезнет. Моя деятельность выглядит так:

    package dk.appsfabrikken.iphonetabs;
import dk.appsfabrikken.iphonetabs.R;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.StateListDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TextView;

public class MainActivity extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setContentView(R.layout.main);

        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;
        Intent intent;
        MyView view = null;

        // Information Tab
        intent = new Intent().setClass(this, InfoActivity.class);
        view = new MyView(this, R.drawable.icon, R.drawable.icon, "Information");
        view.setBackgroundDrawable(this.getResources().getDrawable(R.layout.selecttabbackground));
        spec = tabHost.newTabSpec("Information").setIndicator(view).setContent(intent);
        tabHost.addTab(spec);

        // Pris tab
        intent = new Intent().setClass(this, PriceActivity.class);
        view = new MyView(this, R.drawable.icon, R.drawable.icon, "Priser");
        view.setBackgroundDrawable(this.getResources().getDrawable(R.layout.selecttabbackground));
        spec = tabHost.newTabSpec("Priser").setIndicator(view).setContent(intent);
        tabHost.addTab(spec);

        // Produkt liste Tab
        intent = new Intent().setClass(this, ListeActivity.class);
        view = new MyView(this, R.drawable.icon, R.drawable.icon, "Apps");
        view.setBackgroundDrawable(this.getResources().getDrawable(R.layout.selecttabbackground));
        spec = tabHost.newTabSpec("Apps").setIndicator(view).setContent(intent);
        tabHost.addTab(spec);

        //Kontakt tab
        intent = new Intent().setClass(this, ContactActivity.class);
        view = new MyView(this, R.drawable.icon, R.drawable.icon, "Kontakt");
        view.setFocusable(true);
        view.setBackgroundDrawable(this.getResources().getDrawable(R.layout.selecttabbackground));
        spec = tabHost.newTabSpec("Kontakt").setIndicator(view).setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
        tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = LayoutParams.WRAP_CONTENT;
        tabHost.getTabWidget().getChildAt(1).getLayoutParams().height = LayoutParams.WRAP_CONTENT;
        tabHost.getTabWidget().getChildAt(2).getLayoutParams().height = LayoutParams.WRAP_CONTENT;
        tabHost.getTabWidget().getChildAt(3).getLayoutParams().height = LayoutParams.WRAP_CONTENT;

    }

    private class MyView extends LinearLayout {
        ImageView iv;
        TextView tv;

        public MyView(Context c, int drawable, int drawableselec, String label) {
            super(c);
            iv = new ImageView(c);
            StateListDrawable listDrawable = new StateListDrawable();
            listDrawable.addState(SELECTED_STATE_SET, this.getResources()
                    .getDrawable(drawableselec));
            listDrawable.addState(ENABLED_STATE_SET, this.getResources()
                    .getDrawable(drawable));
            iv.setImageDrawable(listDrawable);
            iv.setBackgroundColor(Color.TRANSPARENT);
            iv.setLayoutParams(new LayoutParams(50, 50, (float) 0.0));
            setGravity(Gravity.CENTER);
            tv = new TextView(c);
            tv.setText(label);
            tv.setGravity(Gravity.CENTER);
            tv.setBackgroundColor(Color.TRANSPARENT);
            tv.setTextColor(Color.WHITE);
            tv.setTextSize(12);
            tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT, (float) 1.0));
            setOrientation(LinearLayout.VERTICAL);
            addView(iv);
            addView(tv);
            setBackgroundDrawable(this.getResources().getDrawable(
                    R.layout.selecttabbackground));
        }
    }
}

Есть ли способ проверить размер экрана устройства внутри упражнения, а затем изменить iv.setLayoutParams(new LayoutParams(50, 50, (float) 0.0)); и уменьшить размер изображения?

Если вы не поняли мою мысль, я постараюсь объяснить ее лучше.

Ответы [ 2 ]

1 голос
/ 03 января 2012

Я нашел решение. Опубликуйте это для других, чтобы использовать. Не обращайте внимания на датские комментарии.

private class MyView extends LinearLayout {
        ImageView iv;
        TextView tv;

        public MyView(Context c, int drawable, int drawableselec, String label) {
            super(c);
            iv = new ImageView(c);
            StateListDrawable listDrawable = new StateListDrawable();
            listDrawable.addState(SELECTED_STATE_SET, this.getResources()
                    .getDrawable(drawableselec));
            listDrawable.addState(ENABLED_STATE_SET, this.getResources()
                    .getDrawable(drawable));
            iv.setImageDrawable(listDrawable);
            iv.setBackgroundColor(Color.TRANSPARENT);
            //Testing screen size and resize icons for small devices
            if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {     
                iv.setLayoutParams(new LayoutParams(30, 30, (float) 0.0));
            }

            else{
            iv.setLayoutParams(new LayoutParams(50, 50, (float) 0.0));
            }

            //Tekst og billeder centreres på skærmen
            setGravity(Gravity.CENTER);
            tv = new TextView(c);
            tv.setText(label);
            tv.setGravity(Gravity.CENTER);
            tv.setBackgroundColor(Color.TRANSPARENT);
            //Størrelse og tekstfarve bestemmes
            tv.setTextColor(Color.WHITE);
            tv.setTextSize(12);
            tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT, (float) 1.0));
            setOrientation(LinearLayout.VERTICAL);
            addView(iv);
            addView(tv);
            //Bestemmer hvordan en tab skal se ud når den markeres
            setBackgroundDrawable(this.getResources().getDrawable(
                    R.layout.selecttabbackground));
        }
0 голосов
/ 29 декабря 2011

получение размера экрана:

  Display display = getWindowManager().getDefaultDisplay(); 
  int width = display.getWidth();
  int height = display.getHeight();

Перемещение макета и его элементов из кода в xml!

...