- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
您好,我在这里和 Google 上到处搜索,但没有得到正确答案。所以我发布了一个新问题:
我有几个 Android 应用程序可以在 1.6 到 2.3 上完美运行...
但是现在,对于 Android 4.0 (ICS),我有用户报告说当应用程序启动时主页上的屏幕闪烁,除了“主页”和强制停止应用程序之外什么也做不了……(然后。您可以再次启动该应用程序,它最终会运行...:O)
我已经在模拟器和包括搭载 Android 4.0.4 的 Galaxy S 3 在内的多种设备上测试了该应用程序,但我无法重现该问题!! :((看来问题主要出在 HTC One 上......
这是 Activity 的简单代码
public class WelcomePage extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Eula.show(this);
//on lui associe le layout
setContentView(R.layout.main);
//on récupère tous les éléments
Button buttonGuide = (Button)findViewById(R.id.buttonOui);
Button buttonHotel = (Button)findViewById(R.id.buttonNon);
Button buttonMap = (Button)findViewById(R.id.buttonMapg);
Button buttonMaps = (Button)findViewById(R.id.buttonMaps);
Button buttonMapb = (Button)findViewById(R.id.buttonMapb);
Button buttonTwitt = (Button)findViewById(R.id.buttonTwitt);
Button buttonFaceb = (Button)findViewById(R.id.buttonFaceb);
Button buttonGoogle = (Button)findViewById(R.id.buttonGoogle);
Button buttonGeoloc = (Button)findViewById(R.id.buttonGeoloc);
OnClickListener onClickLister = new OnClickListener() {
public void onClick(View v){
Intent intent;
switch(v.getId()){
//si on a cliqué sur le button Oui
case R.id.buttonOui:
Bundle objetbunble = new Bundle();
objetbunble.putString("titre", "Phuket");
String lurl;
if (getString(R.string.lnguserlook).equals("en")) { lurl = "phuketen"; } else { lurl = "phuket"; }
objetbunble.putString("url", lurl);
intent = new Intent(WelcomePage.this, AfficheGuide.class);
Toast.makeText(WelcomePage.this, getString(R.string.titguid)+" Phuket "+getString(R.string.titguid2), Toast.LENGTH_SHORT).show();
((MyApplication)getApplicationContext()).setIsPagehelp(false); // pas Help en globale
//On affecte à l'Intent le Bundle que l'on a créé
intent.putExtras(objetbunble);
startActivity(intent);
break;
case R.id.buttonNon:
Toast.makeText(WelcomePage.this, getString(R.string.hotellist), Toast.LENGTH_SHORT).show();
//On créé l'Intent qui va nous permettre d'afficher l'autre Activity
intent = new Intent(WelcomePage.this, ListeDestinationAll.class);
startActivity(intent);
break;
case R.id.buttonGeoloc:
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else { Toast.makeText(WelcomePage.this, "Geolocalisation", Toast.LENGTH_SHORT).show();
intent = new Intent(WelcomePage.this, AfficheGeoloc.class);
startActivity(intent);
}
break;
case R.id.buttonMapg:
Toast.makeText(getApplicationContext(), getString(R.string.map1), Toast.LENGTH_SHORT).show();
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else {
Toast.makeText(WelcomePage.this, "Phuket", Toast.LENGTH_SHORT).show();
objetbunble = new Bundle();
//Cela fonctionne plus ou moins comme une HashMap, on entre une clef et sa valeur en face
objetbunble.putString("titre", "Phuket");
objetbunble.putString("url", "phuket&titre=Phuket");
intent = new Intent(WelcomePage.this, AfficheMaps.class);
//On affecte à l'Intent le Bundle que l'on a créé
intent.putExtras(objetbunble);
startActivity(intent);
}
break;
case R.id.buttonMaps:
Toast.makeText(getApplicationContext(), getString(R.string.map2), Toast.LENGTH_SHORT).show();
Bundle objetbunblemap = new Bundle();
objetbunblemap.putString("titre", getString(R.string.map2));
objetbunblemap.putString("url", "pic");
final Intent intentm;
intentm = new Intent(WelcomePage.this, ImageViewerJP.class);
intentm.putExtras(objetbunblemap);
startActivity(intentm);
break;
case R.id.buttonMapb:
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else { //On créé un objet Bundle, c'est ce qui va nous permetre d'envoyer des données à l'autre Activity
objetbunble = new Bundle();
objetbunble.putString("titre", getString(R.string.titevent3)+" Phuket");
objetbunble.putString("url", getString(R.string.urlevent2)+"phuket");
intent = new Intent(WelcomePage.this, AfficheEvents.class);
Toast.makeText(WelcomePage.this, getString(R.string.titevent3)+" Phuket", Toast.LENGTH_SHORT).show();
//On affecte à l'Intent le Bundle que l'on a créé
intent.putExtras(objetbunble);
startActivity(intent);
}
break;
case R.id.buttonTwitt:
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else { Toast.makeText(WelcomePage.this, "Twitter", Toast.LENGTH_SHORT).show();
//On créé l'Intent qui va nous permettre d'afficher l'autre Activity
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://mobile.twitter.com/#!/ResaHotelThai"));
startActivity(intent);
}
break;
case R.id.buttonGoogle:
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else { Toast.makeText(WelcomePage.this, "Google+", Toast.LENGTH_SHORT).show();
//On créé l'Intent qui va nous permettre d'afficher l'autre Activity
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://plus.google.com/114371498756127408275/posts"));
startActivity(intent);
}
break;
case R.id.buttonFaceb:
if (!(Extras.Internet.isOnline())){
AlertDialog.Builder builder = new AlertDialog.Builder(WelcomePage.this);
builder.setMessage(getString(R.string.txtoffline))
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).create().show(); }
else { Toast.makeText(WelcomePage.this, "Facebook", Toast.LENGTH_SHORT).show();
//On créé l'Intent qui va nous permettre d'afficher l'autre Activity
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://m.facebook.com/ResaHotelThai"));
startActivity(intent);
}
break;
}
}
};
//on affecte aux Button l'écouteur d'évènement
buttonGuide.setOnClickListener(onClickLister);
buttonHotel.setOnClickListener(onClickLister);
buttonMap.setOnClickListener(onClickLister);
buttonMaps.setOnClickListener(onClickLister);
buttonMapb.setOnClickListener(onClickLister);
buttonTwitt.setOnClickListener(onClickLister);
buttonFaceb.setOnClickListener(onClickLister);
buttonGoogle.setOnClickListener(onClickLister);
buttonGeoloc.setOnClickListener(onClickLister);
}
//Méthode qui se déclenchera lorsque vous appuierez sur le bouton menu du téléphone
public boolean onCreateOptionsMenu(Menu menu) {
//Création d'un MenuInflater qui va permettre d'instancier un Menu XML en un objet Menu
MenuInflater inflater = getMenuInflater();
//Instanciation du menu XML spécifier en un objet Menu
inflater.inflate(R.layout.menu, menu);
//Il n'est pas possible de modifier l'icône d'entête du sous-menu via le fichier XML on le fait donc en JAVA
menu.getItem(0).getSubMenu().setHeaderIcon(R.drawable.language);
return true;
}
//Méthode qui se déclenchera au clic sur un item
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
//On regarde quel item a été cliqué grâce à son id et on déclenche une action
switch (item.getItemId()) {
case R.id.option:
Toast.makeText(WelcomePage.this, getString(R.string.language), Toast.LENGTH_SHORT).show();
return true;
case R.id.french:
Locale locale = new Locale("fr");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
((MyApplication)getApplicationContext()).setState("fr"); // passe langue en globale
Toast.makeText(WelcomePage.this, "Français", Toast.LENGTH_SHORT).show();
intent = new Intent(WelcomePage.this, WelcomePage.class);
//On redémarre l'Activity
startActivity(intent);
finish();
return true;
case R.id.english:
Locale locale2 = new Locale("en");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
((MyApplication)getApplicationContext()).setState("en"); // passe langue en globale
Toast.makeText(WelcomePage.this, "English", Toast.LENGTH_SHORT).show();
intent = new Intent(WelcomePage.this, WelcomePage.class);
//On redémarre l'Activity
startActivity(intent);
finish();
return true;
case R.id.about:
// Assigne un Layout particulier a la dialogue Box
LayoutInflater inflater = (LayoutInflater) WelcomePage.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.afficheabout,
(ViewGroup) findViewById(R.id.layout_root));
// Traitement du texte a afficher + linkify pour que le lien soit cliquable
TextView text = (TextView) layout.findViewById(R.id.text);
final SpannableString s = new SpannableString("Version 1.1.0\n\n\nwww.bloodico.com\n\nCopyright ©2011/2012\nBloodico Co Ltd");
text.setText(s);
Linkify.addLinks(text, Linkify.ALL);
// Traitement de l'image a afficher a gauche
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.sawadi);
// Construction de la dialogbox
AlertDialog.Builder adb = new AlertDialog.Builder(WelcomePage.this);
adb.setView(layout);
adb.setTitle("GuidePhuket");
adb.setIcon(R.drawable.ic_launcher);
//on indique que l'on veut le bouton ok à notre boite de dialogue
adb.setPositiveButton("Ok", null);
adb.show();
return true;
case R.id.help:
Toast.makeText(WelcomePage.this, getString(R.string.helptitle), Toast.LENGTH_SHORT).show();
//On créé un objet Bundle, c'est ce qui va nous permetre d'envoyer des données à l'autre Activity
Bundle objetbunble = new Bundle();
//Cela fonctionne plus ou moins comme une HashMap, on entre une clef et sa valeur en face
objetbunble.putString("titre", getString(R.string.helptitle));
objetbunble.putString("url", getString(R.string.helpurl));
intent = new Intent(WelcomePage.this, AfficheGuide.class);
//On affecte à l'Intent le Bundle que l'on a créé
intent.putExtras(objetbunble);
startActivity(intent);
return true;
case R.id.morapp:
Toast.makeText(WelcomePage.this, getString(R.string.morapp), Toast.LENGTH_SHORT).show();
Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("market://search?q=pub:Bloodico+Co+Ltd"));
startActivity(marketIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
这是使用的布局
<?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"
android:gravity="center"
android:background="@drawable/fond"
>
<ImageView android:id="@+id/imageintro"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/logocompanyfr"
android:gravity="center_horizontal"
android:contentDescription="@string/app_name"
/>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp"
>
<Button android:id="@+id/buttonOui"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titreguidebutton" />
<Button android:id="@+id/buttonNon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titrehotelbutton" />
<Button android:id="@+id/buttonGeoloc"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/titregeolocbutton" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="5dp"
>
<Button android:id="@+id/buttonMapg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titreinfobutton" />
<Button android:id="@+id/buttonMaps"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titremapsbutton" />
<Button android:id="@+id/buttonMapb"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/titremapbbutton" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:orientation="horizontal" >
<Button android:id="@+id/buttonFaceb"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titrefacebbutton" />
<Button android:id="@+id/buttonTwitt"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginRight="20dp"
android:background="@drawable/titretwittbutton" />
<Button android:id="@+id/buttonGoogle"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/titregooglebutton" />
</LinearLayout>
</LinearLayout>
这是 list 文件的摘录
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name=".MyApplication" android:allowBackup="true" android:screenOrientation="portrait">
<activity android:name=".WelcomePage"
android:screenOrientation="portrait"
android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
任何帮助将不胜感激,因为我有越来越多的用户关注并且找不到搜索的方法。
最佳答案
终于找到了错误和正确的解决方案!!
实际上,只有当人们第一次从陆地模式的屏幕启动应用程序时才会出现问题......应用程序在 list 中被强制为纵向,但是,尽管如此,我意识到 Android 仍然在启动时执行 onConfigurationChanged(从 Land 到 Portrait 时,例如)
问题是该应用程序有两种语言,为了在屏幕方向上保持正确的语言,我增加了我自己的 Myapplication(以扩展应用程序)来管理 onConfigurationChanged 并在整个应用程序中设置正确的 Locale 默认值!
即使在 Manifest 中强制应用程序纵向(由于前段时间的某些原因),MyApplication.java 中的 onConfigurationChanged 仍然在某些情况下执行...
问题:
MyApplication.java 中的代码是
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
// Set correct language (default or chosen)
Locale locale = new Locale(getState());
Locale.setDefault(locale);
newConfig.locale = locale;
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
解决方案:
不要直接使用 newConfig,而是按照 Android Developper 的建议创建一个 Modifiable Configuration 对象,并使用它
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
// Set correct language (default or chosen)
Locale locale = new Locale(getState());
Locale.setDefault(locale);
Configuration config = new Configuration(newConfig); // get Modifiable Config from actual config changed
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
以前直接加载 newConfog objest 的解决方案在 Android v2.3 之前一直有效,但在 Android Version >= 4.0 中不再被接受
现在一切正常!!
(特别感谢 Frédéric Espiau 别名 Apollidore,因为阅读了他的优秀著作“Créez des applications pour Android”即可找到解决方案)
关于Android 应用程序屏幕在启动时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005010/
我是 Jetpack Compose 的新手。我目前正在开发一个聊天应用程序。我要求用户从图库中选择图像或从相机中拍照。然后我将文件 Uri 保存到数据库中,然后收听所有消息的列表。更新此列表时,此图
强制性代码,但 jsFiddle 准确地演示了这个问题。我有一个在 3 秒内扩大和淡出的圆圈。声纳风格是我的意图。问题是动画完成后它会快速“闪烁”然后重新开始。 请在此处查看问题:http://jsf
您好,我有一个多种颜色的 Logo ,我想将其用于随机/不稳定的故意闪烁效果。我只能找到其他关于使用淡入/淡出功能进行闪烁技巧的文章。关于如何用 css3 和/或 jQuery 做这样的技巧有什么想法
我正在使用 Swing 创建组件并使用 GLCanvas (com.jogamp.opengl.awt.GLCanvas) 创建我的窗口。 接下来就是问题了 在初始状态下,一切正常,但是当我拖动窗口调
我将 PhoneGap 2.2.0 与 jQuery Mobile 1.2.0 结合用于我在 Android 平台(版本 2.3.3 及更高版本)上的应用程序。在我使用固定标题的页面上,根本没有转换。
在我们使用 JavaScript 向页面添加图像或文本后,我们的网页在 iPad 上闪烁。我们尝试了 -webkit-backface-visibility:hidden; 的各种组合; -webki
有人能告诉我为什么在这个使用 SwingWorker 的简单演示中,屏幕闪烁,好像按钮不断跳跃一样? (关于改进多线程部分的反馈也值得赞赏)。 import java.awt.EventQueue;
我正在运行时从 CSV 文件向字符串网格添加多行,但是 StringGrid 在更新时似乎会闪烁很多,我认为会有一个 beginupadate/Endupdate 命令来停止此操作。但是我找不到它。有
我的窗口中有一个文本元素,我希望它每隔几秒或几毫秒闪烁一次或出现并消失。 我的代码是: import QtQuick 2.6 import QtQuick.Window 2.2 Window {
我的窗口中有一个文本元素,我希望它每隔几秒或几毫秒闪烁一次或出现并消失。 我的代码是: import QtQuick 2.6 import QtQuick.Window 2.2 Window {
我在UIButtons中有3个UIView,它们具有相同的文本颜色和相同的背景颜色。轻按三个按钮即可触发相应的事件。但是只有其中之一会响应触摸而“闪烁”。其他两个会发生什么?它们有时(但很少)具有“闪
我在 iOS 8 下实现 UIRefreshControl 时遇到了一种闪烁。每次我第一次到达 tableView 的顶部时(即应用程序刚刚启动时),我都会看到下面的 gif 中显示的闪烁。这不会发生
我希望有人能帮助我。我遇到以下问题: http://jsfiddle.net/zhPAF/ 标记: About Us
当鼠标悬停在图像“A”上时,尝试让图像“B”覆盖在图像“A”上。理想情况下,我希望它淡入。 HTML: jQuery:
我有一个 TabControl,我可以在其中添加/删除多个 TabPage。 当我添加足够多的页面以至于必须显示导航按钮时,我遇到了闪烁问题。 当导航按钮(左右导航的 2 个箭头)未显示时,我根本没有
我尝试实现自定义双缓冲,但它会导致闪烁。 这是控件(继承自Control的自定义控件)构造函数中的代码: bufferContext = new BufferedGraphicsContext();
我有以下代码: var footer = $('.footer'), extra = 0; // footer.css({ opacity: '0', display: 'block' });
我遇到了与 JPanel 中闪烁相关的问题。不知道为什么, window 里的球时不时地闪烁。我尝试了几种方法,比如双缓冲、BufferStrategy、Canvas,但都不起作用。主要思想是使用线程
我试图在 OpenGL 中绘制一些文本,而程序绘制立方体或任何 Opengl native ,因此,当我尝试将文本放在屏幕上时,它闪烁得非常快,我不知道为什么,我试图改变 sleep 值什么都没有..
我已经使用 LibGDX UI Setup 启动了一个项目。 我在 implements ApplicationListener 中唯一拥有的是: public void create() {
我是一名优秀的程序员,十分优秀!