我绝对是Android开发新手,我在开发我的第一个应用程序时遇到了一些问题。
于是就有了如下的情况:
1.我有一个fragment_screen_slide_page.xml文件,其中包含显示在视图中的片段元素,并且在将其加载到Activity中时必须显示图像:
<!-- Dummy content. -->
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dp">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:scaleType="fitCenter"
android:layout_height="250dp"
android:background="@drawable/carbonara" />
<TextView android:id="@android:id/text1"
style="?android:textAppearanceLarge"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp" />
</LinearLayout>
如您所见,它包含ImageView元素,id=imageView1(当片段放入Activity时,必须加载图像)。
然后,我有这个ScreenSlidePageFragment,它在前面的片段上工作,我有这样的东西:
public class ScreenSlidePageFragment extends Fragment {
................................................................
................................................................
................................................................
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("PAGE NUMBER: "+ mPageNumber + 1);
// Inflate the layout containing a title and body text.
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_screen_slide_page, container, false);
// Set the title view to show the page number.
((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.title_template_step, mPageNumber + 1));
System.out.println("TESTO: "+ getString(R.string.title_template_step, mPageNumber + 1));
// Obtain the colosseum_icon.png from the rsources as a Drawable:
Drawable drawable = getResources().getDrawable(R.drawable.colosseum_icon);
// Retrieve the reference of the ImageView element of the layout having id=imgSlide:
View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false);
ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1);
final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
imgSlideView.setBackgroundDrawable(drawable);
} else {
//imgSlideView.setBackground(getResources().getDrawable(R.drawable.colosseum_icon));
}
return rootView;
}
................................................................
................................................................
................................................................
}
................................................................
................................................................
................................................................
}
所以可以看到,进入onCreateView()方法我基本上做了如下操作:
1.我检索在先前的fragment_screen_slide_page.xml文件中声明了id=imageView1的ImageView元素引用。
1.我将检索到的可绘制对象设置为此ImageView的背景,执行以下操作:
imgSlideView.setBackgroundDrawable(drawable)
我希望此图像必须显示在屏幕上,但没有显示。未显示与检索到的drawable变量相关的图像。显示的不是图像,而是高度为250dp的空白空间(如XML中指定的)。在空白图像下显示TextView的预期内容
我遗漏了什么?如何解决此问题?
3条答案
按热度按时间4smxwvx51#
首先,您希望在ImageView上使用
android:src="@drawable/carbonara"
而不是android:background="@drawable/carbonara"
,并且您设置了.setImageDrawable
而不是.setBackgroundDrawable
下一步-
View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false);
是不需要的,应该删除。它应该是ImageView imgSlideView = (ImageView) rootView.findViewById(R.id.imageView1);
,而不是ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1);
当然这也
只有在sdk低于Jelly Bean时才被激活(我不确定这是否适用于您的测试环境)。
iqjalb3h2#
使用setImageResource()而不是setBackgroundDrawable()
应该是这样的
(R.可绘制的图形。您的图像);
gg0vcinb3#
函数inflate每次都会生成一个新的视图。您调用了两次,因此您有两个单独的视图:view和rootView,并返回rootView,因此片段将显示rootView,无视图。无图像。更改如下:
年,以及更多,ImageView应该使用android:src和setImageDrawable
一切都会好起来的。
添加,此代码块存在问题:
如果你的手机,安卓版本大于4.1(我想是的-_-|),您不会更改图像。因此取消注解else代码。