【问题标题】:Set Text on a GridView Image in Android在 Android 中的 GridView 图像上设置文本
【发布时间】:2013-12-30 07:20:55
【问题描述】:

我有一个包含 8 张图片的网格视图

现在在特定的图像视图上,我想设置一个将动态更改的文本值

主要 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/mainLinearLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="@drawable/blue_bar"
        android:orientation="horizontal" >
    </LinearLayout>

    <GridView
        android:id="@+id/gridView1"
        android:layout_below="@+id/mainLinearLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="20dp"
        android:columnWidth="100dp"
        android:gravity="center"
        android:numColumns="2"
        android:stretchMode="columnWidth" >
    </GridView>

</RelativeLayout>

**内部 XML 布局 **

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="5dp" >

    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="10dp"
        android:src="@drawable/ic_launcher" />

</LinearLayout>

代码主活动

gridView = (GridView) findViewById(R.id.gridView1);
gridView.setAdapter(new ImageAdapter(this, DASHBOARD_LINKS));

适配器类

public class ImageAdapter extends BaseAdapter {
    private Context context;
    private final String[] dashBoardValues;

    public ImageAdapter(Context context, String[] dashBoardValues) {
        this.context = context;
        this.dashBoardValues = dashBoardValues;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View gridView;

        if (convertView == null) {

            gridView = new View(context);

            // get layout from dashboard_inner.xml
            gridView = inflater.inflate(R.layout.dashboard_inner, null);
            // set image based on selected text
            ImageView imageView = (ImageView) gridView
                    .findViewById(R.id.grid_item_image);
            imageView.setImageResource(R.drawable.ic);


        } else {
            gridView = (View) convertView;
        }

        return gridView;
    }

    @Override
    public int getCount() {
        return dashBoardValues.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

}

那么我怎么能在网格视图中做到这一点。请帮助我。

【问题讨论】:

  • 不仅您的图片也会发布您的代码。只有我们才能理解您的问题。并为您提供帮助..
  • 检查这个..github.com/jgilfelt/android-viewbadger ,我想这会有所帮助:)
  • 我也发布了代码
  • 修改 GridView 的行布局并在那里添加一个 Textview.. 以获取更多信息/帮助添加您的代码。
  • 我已经添加了所有代码,请帮助我现在获得这个功能...

标签: android android-layout android-gridview android-gridlayout


【解决方案1】:

正如其他人已经建议的那样,您可以使用相对布局或 FrameLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="31dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_alignTop="@+id/imageView1"
        android:layout_marginLeft="20dp"
        android:text="TextView" />

</RelativeLayout>

捕捉

检查这个答案 kcoppock 这将使您了解如何使用框架布局

Placing/Overlapping(z-index) a view above another view in android

另外最好使用ViewHolder 模式

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

【讨论】:

    【解决方案2】:

    这是实际的工作代码

    public class MainActivity extends Activity {
    
        private static final String TAG = "AAA";
    
        private static Handler mHandler;
    
        private LayoutInflater layoutInflater;
        private GridView mGridView;
        private int click = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            layoutInflater = LayoutInflater.from(getApplicationContext());
    
            click = 0;
    
            setContentView(R.layout.my_grid_view);
            mGridView = (GridView)findViewById(R.id.my_grid_view);
            mGridView.setAdapter(new MyAdapter());
            mGridView.setOnItemClickListener(new OnItemClickListener() {
    
                public void onItemClick(AdapterView<?> adapterViews, View pView, int position, long id) {
    
                    click++;
                    TextView textView = (TextView)pView.findViewById(R.id.my_text_view);
                    if(textView!=null){
                        textView.setText("Changed : Position = " + position + " : Click No = " + click);
                    }else{
                        Log.d(TAG, "Fish : textView = " + textView);
                    }
                }
            });
    
        }
    
    
        private class MyAdapter extends BaseAdapter{
    
            @Override
            public int getCount() {
                return 200;
            }
    
            @Override
            public Object getItem(int arg0) {
                return arg0;
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
    
                if(convertView == null){ //This is memory efficient, but after certain no of time u will get similar view repetition, 
                    //to over come that overwrite getViewTypeCount() & provide proper way of persistent view & data management mechanism.
                    convertView = layoutInflater.inflate(R.layout.child_one, null);
                }
    
                return convertView;
            }
    
        }}
    

    还有 XML

    <?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/my_grid_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnWidth="90dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" />
    

    还有

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:orientation="vertical" >
    
        <ImageView
            android:id="@+id/my_image_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:scaleType="fitXY"
            android:src="@drawable/flower_1" />
    
        <TextView
            android:id="@+id/my_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top|right"
            android:background="@android:color/darker_gray"
            android:text="Default Text" />
    
    </FrameLayout>
    

    【讨论】:

    • 哪个是孩子??请发截图
    • 第二个是从 getView() 返回的子级。第一个设置为 setContentView(R.layout.my_grid_view);两者都是“res/layout”中的两个不同的 XML 文件
    【解决方案3】:

    而不是图像视图传递框架布局参考。它会起作用的。 framelayout 是仅视图子类的视图组。

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:orientation="vertical">
    
    <ImageView android:scaleType="fitXY"
        android:src="@drawable/ic_launcher"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/image_view"
        android:layout_gravity="center"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_gravity="top|right"
        android:background="@android:color/darker_gray"
        android:layout_height="wrap_content"
        android:id="@+id/badge_view"
        android:text="10"/>
    </FrameLayout>
    

    快照

    【讨论】:

    • 我必须在可能的网格视图中做什么才能得到这个
    • 用我的代码替换 *Inner XML Layout * 代码,并将我的图像视图 id 更改为你的 id (grid_item_image)
    • 我现在收到此异常 com.android.ddmlib.SyncException: 本地路径不存在。
    • 请修改你的xml
    • 它对我不起作用,我需要在特定图像上使用它,并且它没有显示在我的图像顶部。你能帮我设置特定图像而不是所有图像跨度>
    【解决方案4】:

    获取此图像并添加到您的项目中。 new http://www.flickr.com/photos/113556524@N05/11793569304/

    这是屏幕截图nw http://www.flickr.com/photos/113556524@N05/11793569304/

    这是你要使用的 xml 代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" 
        android:weightSum="4">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:layout_weight="1"
            android:weightSum="2">
    
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:layout_weight="1"
            android:weightSum="2">
    
            <Button
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
            <Button
                android:id="@+id/button4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" 
            android:weightSum="2">
    
            <Button
                android:id="@+id/button5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
            <Button
                android:id="@+id/button6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" 
            android:weightSum="2">
    
            <Button
                android:id="@+id/button7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
            <Button
                android:id="@+id/button8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/aaa"
                android:text="" />
    
        </LinearLayout>
    
    
    
    </LinearLayout>
    

    在你的活动 java 文件中使用这个:

    package com.example.dashboard;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        Button b1,b2,b4,b3,b5,b6,b7,b8;
    
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.neww);
    
            b1 =(Button) findViewById(R.id.button1);
            b2 = (Button) findViewById(R.id.button2);
            b3 = (Button) findViewById(R.id.button3);
            b4 = (Button) findViewById(R.id.button4);
            b5 = (Button) findViewById(R.id.button5);
            b6 = (Button) findViewById(R.id.button6);
            b5 = (Button) findViewById(R.id.button7);
            b6 = (Button) findViewById(R.id.button8);
    
    
    
    
            /* Wat ever you want validation , anything do here */
    
           // if you need to set text to button 
    
            b1.setText("Hi pooja");
    
    
            //  blah blah blah - wat ever you want to any button text
    
    
    
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    

    知道了;)

    【讨论】:

    • 那么我怎么能像我在问题中那样在图像顶部设置文本
    • delete background="@null" 而不是drawbleontop,只需使用drawwble。
    • 请附上丢失的屏幕截图
    • 查看这些链接,上传屏幕截图 r prblms
    【解决方案5】:

    使用 FrameLayout 作为 GridView 的子级。在 FrameLayout 中,首先放置 ImageView 并在其顶部放置一个 TextView,如“sush”所述。 然后您可以通过程序按需更改 TextView 的可见性和内容。 它对您不起作用,因为可能对于您的所有 TextViews 都放置了相同的“android:id”,为不同的 TextView 放置了不同的 id。它一定会奏效。我已经测试过了。

    【讨论】:

    • 对不起,你必须等到晚上,因为在我的办公室里,这里不允许复制和粘贴到办公室外的局域网:(
    • 好的,我在等待您的回复。因为我需要在特定图像上放置文本。并且文本将被动态添加。请注意我要放置文本的单个图像
    【解决方案6】:
    http://i.stack.imgur.com/HUY4o.png Check the sample image...
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/album_item"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <ImageView
        android:id="@+id/cover"
        android:layout_width="148dp"
        android:layout_height="148dp"
        android:src="@drawable/empty_photo" />
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/cover"
        android:background="#70000000"
        android:padding="6dp" >
    
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="12sp"
            android:textStyle="bold" />
    </LinearLayout>
    </RelativeLayout>
    

    --->使用这个布局并在你的适配器中膨胀它。你会得到图像底部的文本。

    【讨论】:

    • 我希望图片顶部的文字与问题一样
    • 在线性布局中使用 alignTop 代替 alignBottom...它会起作用
    • 我必须在其中一张中显示 8 张图片,我必须动态地将文本放在顶部。所以你能发布完整的代码吗?请问我怎么能得到这个
    • 在您的适配器中使用位置变量在特定位置设置文本,在剩余位置将文本设置为空或不设置任何文本。
    • 你会看到我在问题中发布的图像吗?你觉得你的代码会帮助我得到那个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多