如何从 Java 代码将图像添加到 Android 应用程序

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13464754/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 12:50:44  来源:igfitidea点击:

How can you add images to Android App from java code

javaandroidxmltabs

提问by zingwing

My friend and I are making an android app for our class project. We are making and app with tabs. We want to know if there is a way to use one xml file for the tabs and if we can add pictures straight from the java code or do we need to make an xml file for each individual tab. If we do how would we go about keeping the same formatting for all the tabs.

我和我的朋友正在为我们的班级项目制作一个 android 应用程序。我们正在制作带有标签的应用程序。我们想知道是否有办法为选项卡使用一个 xml 文件,是否可以直接从 java 代码添加图片,或者我们是否需要为每个单独的选项卡制作一个 xml 文件。如果我们这样做,我们将如何为所有选项卡保持相同的格式。

The code i provide is the main.xml in which we have attached some pictures to. the tab.xml is the xml layout which we formatted the tabs. the SalesExecutiveDashboard.java is the main activity that calls the other tab activities. Lastly HomeTab.java is and example of on our tab codes.

我提供的代码是 main.xml,我们在其中附加了一些图片。tab.xml 是我们格式化选项卡的 xml 布局。SalesExecutiveDashboard.java 是调用其他选项卡活动的主要活动。最后 HomeTab.java 是我们选项卡代码的示例。

Thanks for all the help provided

感谢您提供的所有帮助

main.xml

主文件

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
 android:layout_height="fill_parent"
 android:layout_width="fill_parent"
 android:orientation="vertical"
 xmlns:android="http://schemas.android.com/apk/res/android">
<TextView 
 android:layout_height="wrap_content"
 android:layout_width="wrap_content"
 android:layout_margin="1dp" 
 android:text="@string/overall_sales"
 android:id="@+id/pieChartView"/>
<ImageView 
 android:layout_height="fill_parent"
 android:layout_width="fill_parent" 
 android:id="@+id/pie_chart" 
 android:src="@drawable/piechartsmall"/>
</LinearLayout>

tab.xml

标签文件

<?xml version="1.0" encoding="UTF-8"?>
<TabHost
 android:id="@android:id/tabhost" 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_height="fill_parent" 
 android:layout_width="fill_parent"> 

<ScrollView 
 xmlns:android="http://schemas.android.com/apk/res/android"    
 android:layout_height="fill_parent"
 android:layout_width="fill_parent">

<LinearLayout android:id="@+id/LinearLayout01"
 android:layout_height="wrap_content" 
 android:layout_width="fill_parent" 
 android:orientation="vertical">

<HorizontalScrollView 
 android:layout_height="wrap_content"
 android:layout_width="wrap_content" 
 android:scrollbars="none"
 android:fillViewport="true">

<TabWidget android:id="@android:id/tabs"
 android:layout_height="40dp" 
 android:layout_width="wrap_content"
 android:layout_gravity="bottom"
 android:gravity="bottom">

</TabWidget>
</HorizontalScrollView>

<FrameLayout
 android:id="@android:id/tabcontent"
 android:layout_height="fill_parent"
 android:layout_width="fill_parent">
</FrameLayout>
</LinearLayout>
</ScrollView>
</TabHost>

SaleExecutiveDashboard.java

SaleExecutiveDashboard.java

package com.androidpeople.tab;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class SalesExecutiveDashboard extends TabActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab);

        /* TabHost will have Tabs */
        //TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);

        TabHost tabHost=getTabHost();

        /* TabSpec used to create a new tab. 
         * By using TabSpec only we can able to setContent to the tab.
         * By using TabSpec setIndicator() we can set name to tab. */

        /* tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec HomeTabSpec = tabHost.newTabSpec("Tab1");
        TabSpec RevExpTabSpec = tabHost.newTabSpec("Tab2");
        TabSpec AccountTabSpec = tabHost.newTabSpec("Tab3");
        TabSpec DistroTabSpec = tabHost.newTabSpec("Tab4");
        TabSpec SBPTabSpec = tabHost.newTabSpec("Tab5");
        TabSpec AlertTabSpec = tabHost.newTabSpec("Tab6");

        /* TabSpec setIndicator() is used to set name for the tab. */
        /* TabSpec setContent() is used to set content for a particular tab. */
        HomeTabSpec.setIndicator("  Home  ").setContent(new Intent(this,HomeTab.class));

        RevExpTabSpec.setIndicator("  Rev/Exp  ").setContent(new Intent(this,RevExpTab.class));
        AccountTabSpec.setIndicator("  Accounts  ").setContent(new Intent(this,AccountsTab.class));
        DistroTabSpec.setIndicator("  Distribution  ").setContent(new Intent(this,DistroTab.class));
        SBPTabSpec.setIndicator("  Sales by Product  ").setContent(new Intent(this,SBPTab.class));
        AlertTabSpec.setIndicator("  Alerts  ").setContent(new Intent(this,AlertTab.class));

        /* Add tabSpec to the TabHost to display. */
        tabHost.addTab(HomeTabSpec);
        tabHost.addTab(RevExpTabSpec);
        tabHost.addTab(AccountTabSpec);
        tabHost.addTab(DistroTabSpec);
        tabHost.addTab(SBPTabSpec);
        tabHost.addTab(AlertTabSpec);

    }
}

HomeTab.java

HomeTab.java

package com.androidpeople.tab;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.widget.ImageView;

public class HomeTab extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* First Tab Content */
        ImageView image = (ImageView) findViewById(R.id.pie_chart);

        //TextView textView = new TextView(this);
        //textView.setText("This is the Home Tab");
        //setContentView(textView);
        setContentView(R.layout.main);

    }
}

回答by Vynos

Yes, you can use one layout resource multiple times. It only specifies the appearance. As for the images, so long as they are in your drawable resources, you would just assign them to your ImageView as you wished.

是的,您可以多次使用一种布局资源。它只指定外观。至于图像,只要它们在您的可绘制资源中,您就可以根据需要将它们分配给您的 ImageView。

//hold the integer resource id of your image
Integer img = R.drawable.<<imageid>>;

//get your ImageView
ImageView iView = (ImageView) findViewById(R.id.<<viewname>>);

//assign your image
iView.setImageResource(img);

Another option is in the drawable directory, you can create xml 'selectors' to tell your app which image to use dependent on some condition. For example, let's say you have an ImageButton and want a different image to show if it's disabled. You can have a selector like the following in the drawable directory to use the images in your drawable-h/l/mdpi directories:

另一个选项是在 drawable 目录中,您可以创建 xml 'selectors' 来告诉您的应用程序根据某些条件使用哪个图像。例如,假设您有一个 ImageButton 并希望在它被禁用时显示不同的图像。您可以在 drawable 目录中使用如下所示的选择器来使用 drawable-h/l/mdpi 目录中的图像:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/aps/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/<<disabledImage>>"/>
    <item android:drawable="@drawable/<<defaultImage>>"?>
</selector>

You could then use this selector in your layout.

然后,您可以在布局中使用此选择器。

<Button android:layout_width="fill_parent" android:id="@+id/btn1" android:text="btn1" android:textSize="20dp" android:textColor="@android:color/transparent" android:background="@drawable/<<selectorName>>" android:layout_height="fill_parent" android:onClick="<<clickevent>>" />

I know this is an old question, but hope this helps somebody.

我知道这是一个老问题,但希望这对某人有所帮助。

回答by Yash ajabiya

First of all you need to edit your HomeTab Activity onCreate method like :

首先,您需要编辑 HomeTab Activity onCreate 方法,例如:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /* First Tab Content */
        ImageView image = (ImageView) findViewById(R.id.pie_chart);

        //TextView textView = new TextView(this);
        //textView.setText("This is the Home Tab");
        //setContentView(textView);
        

    }

We can casting any controll after set it layout file you cant casting first :)

我们可以在设置布局文件后投射任何控件,您不能先投射:)

Then after your MainActivity content TabHost so you can set it inBuild Listner like :

然后在您的 MainActivity 内容 TabHost 之后,您可以在Build Listner中设置它,例如:

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
                @Override
                public void onTabChanged(String arg0) {     
 
    int pos=tabHost.getCurrentTab();  Toast.makeText(this,""+pos,Toast.LENGTH_SHORT).show();
  
  
                    SharedPreferences pref=getSharedPreferences(YOUR_PREFERENC,0);
  
  SharedPreferences.Editor et = pref.edit();
  et.putInt(YOUR_POS_KEY,pos);
  et.commit();
                }       
            });

you can use this SharedPreferences value in your sub Activity and check position condition to set dynamic image in your one layout or only in one Java file

您可以在子活动中使用此 SharedPreferences 值并检查位置条件以在您的一个布局中或仅在一个 Java 文件中设置动态图像

i hope it work

我希望它有效

Happy Coding ...

快乐编码...