2012-11-20 61 views
1

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

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

感谢所有帮助提供

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

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

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); 

    } 
} 

回答

0

是的,您可以多次使用一种布局资源。它仅指定外观。至于图像,只要它们在可绘制资源中,就可以按照您的意愿将它们分配给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); 

另一种选择是在绘制目录,也可以创建XML“选择”告诉您的应用程序使用的图像依赖于某些条件。例如,假设您有一个ImageButton,并希望使用不同的图像来显示它是否被禁用。你可以像在绘制目录下面在绘制-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> 

然后,您可以在您的布局中使用这个选择。

<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>>" /> 

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

0

所有你需要编辑HomeTab活动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); 
 
     
 

 
    }

我们可以铸造任何控制研究设置后,布局文件,你不能第一投射:)

然后,在您的MainActivity内容TabHost之后,您可以将其设置为构建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(); 
 
       }  
 
      });

,你可以在你的子活动使用SharedPreferences值和检查位置的条件在一个布局或只在一个Java的文件

我希望它的工作,设置动态图像

快乐编码...

相关问题