如何从 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
How can you add images to Android App from java code
提问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 ...
快乐编码...