Android新人在这里。我正在尝试设置活动以显示所选图像。这段代码的基础来自我试图修改的Hello,Android第3版(实用程序员)。
基本上,我希望能够单击一个活动中的按钮,并启动另一个更改布局的活动,以显示与该按钮关联的图像。我有几个按钮,并希望每个按钮都能显示不同的图像。
文件(删除pic3 -...简化代码):
main.xml:两个按钮的布局(pic1和pic2)
Main.java:包含按钮的onclicklisteners - 意图w / extras(图像文件名)
Viewer.java:默认由eclipse创建,目的是设置新的布局setContentView(R.layout.viewer);
viewer.xml:ImageView的布局
我已经将字符串存储在strings.xml中了(我在eclipse中创建一个字符串,其值为@ drawable / pic1并给它一个imagename的名称,所以我可以调用@ string / imagename作为ImageView的src viewer.xml)。
但是,我从这个论坛上的搜索和阅读中学到了我无法在一个活动中更改strings.xml值(我最初的想法是在Viewer.java中有几行代码可以将imagename字符串更改为任何附加内容传递的内容。
我发现这篇帖子(http://stackoverflow.com/questions/3523384/android-pass-string-from-activity-to-layout)有人试图用TextView做类似的事情,但我'我尝试了这条路线,并且不断在这些路线上出现语法错误。
我真的被困住了。有任何想法吗? 谢谢!
public class Main extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// click listeners
View pic1Button = findViewById(R.id.pic1_button);
pic1Button.setOnClickListener(this);
View pic2Button = findViewById(R.id.pic2_button);
pic2Button.setOnClickListener(this);
}
// ...
public void onClick(View v) {
switch (v.getId()) {
case R.id.pic1_button:
Intent l = new Intent(this, Viewer.class);
l.putExtra("imagefilename", "pic1filename");
startActivity(l);
break;
case R.id.pic2_button:
Intent i = new Intent(this, Viewer.class);
i.putExtra("imagefilename", "pic2filename");
startActivity(i);
break;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src='@string/imagename'
android:scaleType="matrix">
</ImageView>
</FrameLayout>
答案 0 :(得分:0)
您的问题不是很清楚,但根据我的理解,您可以使用以下代码实现这一目标。
的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stackoverflow.biowi"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/icon">
<activity android:name="Main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="Viewer" />
</application>
</manifest>
Main.java:
package com.stackoverflow.biowi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Main extends Activity implements OnClickListener
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// click listeners
View pic1Button = findViewById(R.id.pic1_button);
pic1Button.setOnClickListener(this);
View pic2Button = findViewById(R.id.pic2_button);
pic2Button.setOnClickListener(this);
}
public void onClick(View v) {
Intent i = new Intent(this, Viewer.class);
switch (v.getId()) {
case R.id.pic1_button:
i.putExtra("imagefilename", "pic1filename");
break;
case R.id.pic2_button:
i.putExtra("imagefilename", "pic2filename");
break;
}
startActivity(i);
}
}
Viewer.java:
package com.stackoverflow.biowi;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;
public class Viewer extends Activity
{
/** To be documented. */
private Bitmap mImage1;
/** To be documented. */
private Bitmap mImage2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.viewer);
Bundle bundle = getIntent().getExtras();
String imageName = bundle.getString("imagefilename");
// click listeners
ImageView imageView = (ImageView)findViewById(R.id.imageView);
mImage1 = BitmapFactory.decodeResource(getResources(), R.drawable.pic1);
mImage2 = BitmapFactory.decodeResource(getResources(), R.drawable.pic2);
if(imageName.matches("pic1filename")) {
imageView.setImageBitmap(mImage1);
} else if (imageName.matches("pic2filename")) {
imageView.setImageBitmap(mImage2);
}
}
}
main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, Main"
/>
<Button android:id="@+id/pic1_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
<Button android:id="@+id/pic2_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
viewer.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src='@drawable/pingouin'
android:scaleType="matrix">
</ImageView>
</FrameLayout>
在res / drawable中使用pic1.png,pic2.png和pingouin.png ......