Android以编程方式将图像中心化

时间:2013-12-23 08:42:40

标签: android alignment spinner center

好的,我正在尝试回收这些帖子中提供的关于以编程方式对图像进行居中而没有成功的建议。我的应用程序基本上工作,由一个带有图像的微调器和一些TextViews组成。这些内容取决于微调器的位置。我想要的是当微调器处于默认位置时图像在中央对齐,并在选择了某些东西时向左对齐。布局在布局文件中定义,一个用于纵向,另一个用于横向,这是我正在努力解决的代码的一部分: -

@Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {

            // The variable index identifies the position the spinner is in.
            // TextView name, country and description... locks to the
            // TextViews defined in the activity_main.xml layout files.
            int index = parent.getSelectedItemPosition();
            TextView name = (TextView) findViewById(R.id.name);
            TextView country = (TextView) findViewById(R.id.country);
            TextView description = (TextView) findViewById(R.id.description);

            // Now we'll check to see if we're in the None Selected spinner
            // position. If true we'll dump the name, country and
            // description TextViews otherwise these will be shown.

            if (index == 0) {

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and centre the image when none is selected
                RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) image
                        .getLayoutParams();
                lp.addRule(RelativeLayout.CENTER_VERTICAL);
                image.setLayoutParams(lp);

                name.setVisibility(View.GONE);
                country.setVisibility(View.GONE);
                description.setVisibility(View.GONE);

            } else {

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and left align the image when the spinner is NOT in
                // the None Selected position.
                RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) image
                        .getLayoutParams();
                lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                image.setLayoutParams(lp);

                name.setVisibility(View.VISIBLE);
                country.setVisibility(View.VISIBLE);
                description.setVisibility(View.VISIBLE);

                name.setText(leaders[index]);
                country.setText(states[index]);
                description.setText(descrip[index]);
            }

        }

以下是我的布局文件中的代码段: activity_main.xml纵向视图:

<ImageView
            android:id="@+id/leaderPhoto"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:contentDescription="@string/accessability"
            android:scaleType="centerInside"
            android:src="@drawable/ic_world1" />

activity_in.xml横向视图:

<ImageView
            android:id="@+id/leaderPhoto"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="false"
            android:contentDescription="@string/accessability"
            android:paddingLeft="8dp"
            android:scaleType="center"
            android:src="@drawable/ic_world1" />

3 个答案:

答案 0 :(得分:4)

如果您希望将RelativeLayout.CENTER_VERTICAL水平居中或RelativeLayout.CENTER_HORIZONTAL将其置于两个轴中心,请尝试将RelativeLayout.CENTER_IN_PARENT更改为{{1}}。

答案 1 :(得分:1)

我对您的代码进行了一些更改,以解决您的问题并为您提供帮助:

@Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {

            // The variable index identifies the position the spinner is in.
            // TextView name, country and description... locks to the
            // TextViews defined in the activity_main.xml layout files.
            int index = parent.getSelectedItemPosition();
            TextView name = (TextView) findViewById(R.id.name);
            TextView country = (TextView) findViewById(R.id.country);
            TextView description = (TextView) findViewById(R.id.description);

            // Now we'll check to see if we're in the None Selected spinner
            // position. If true we'll dump the name, country and
            // description TextViews otherwise these will be shown.

            if (index == 0) {

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and centre the image when none is selected
                RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) image
                        .getLayoutParams();
                lp.addRule(0);
                //this will make it center according to its parent
                lp.addRule(RelativeLayout.CENTER_IN_PARENT );

                image.setLayoutParams(lp);

                name.setVisibility(View.GONE);
                country.setVisibility(View.GONE);
                description.setVisibility(View.GONE);

            } else {

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and left align the image when the spinner is NOT in
                // the None Selected position.
                RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) image
                        .getLayoutParams();
                lp.addRule(0);
                lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                image.setLayoutParams(lp);

                name.setVisibility(View.VISIBLE);
                country.setVisibility(View.VISIBLE);
                description.setVisibility(View.VISIBLE);

                name.setText(leaders[index]);
                country.setText(states[index]);
                description.setText(descrip[index]);
            }

        }

更新:根据Anup Cowkur的说法,您应该像这样使用它看到我的更新代码: 我希望你的问题得到解决:)

欢呼声,

哈马德

答案 2 :(得分:0)

非常感谢Anup和Hamad的帮助我现在已经解决了我的问题,在不到一个小时前发布我的Q后非常令人印象深刻。这是现在可用的Java代码:

@Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {

            // The variable index identifies the position the spinner is in.
            // TextView name, country and description... locks to the
            // TextViews defined in the activity_main.xml layout files.
            int index = parent.getSelectedItemPosition();
            TextView name = (TextView) findViewById(R.id.name);
            TextView country = (TextView) findViewById(R.id.country);
            TextView description = (TextView) findViewById(R.id.description);

            // Used to set Layout Params for the ImageView
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) image
                    .getLayoutParams();
            // Clears the rules for when index changes
            lp.addRule(RelativeLayout.CENTER_IN_PARENT, 0);
            lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);

            // Now we'll check to see if we're in the None Selected spinner
            // position. If true we'll dump the name, country and
            // description TextViews otherwise these will be shown.

            if (index == 0) {

                name.setVisibility(View.GONE);
                country.setVisibility(View.GONE);
                description.setVisibility(View.GONE);

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and centre the image when none is selected using
                // Layout Params
                lp.addRule(RelativeLayout.CENTER_IN_PARENT);
                image.setLayoutParams(lp);

            } else {

                image.setImageResource(imgs.getResourceId(
                        spinner1.getSelectedItemPosition(), -1));
                // Try and left align the image when the spinner is NOT in
                // the None Selected position using Layout Params
                lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                image.setLayoutParams(lp);

                name.setVisibility(View.VISIBLE);
                country.setVisibility(View.VISIBLE);
                description.setVisibility(View.VISIBLE);

                name.setText(leaders[index]);
                country.setText(states[index]);
                description.setText(descrip[index]);

            }

        }