- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试有一个自定义对话框首选项,当每个选择膨胀时都会调用一个 Intent,并且膨胀的对话框具有自定义布局。我还试图在首选项本身上显示自定义 xml 布局。意思是它在被选中之前首先显示在设置屏幕上的位置。我有一个自定义的 xml 布局,它会在左侧显示文本,在右侧显示 4 个图标图像。我希望每个图标都可以从那里或对话框弹出窗口中选择。每一个都有它的 Intent 。我知道这是可能的,因为我在动态壁纸中看到过它。我了解如何调用 Intent 并应用自定义布局,但是根据我的尝试,我收到错误“无法扩充对话框”。任何帮助将不胜感激。您可以在这里查看我的代码:TestLWP Settings
这是我想要实现的目标的图像:
最佳答案
我已经弄清楚如何实现上面两个图像了。我在这里为任何想要使用它的人提供了代码。我还详细注释了代码以解释发生了什么。
首先创建一个扩展 DialogPreference 的类并添加以下内容:
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
public class SocialPref extends DialogPreference implements OnClickListener
{
public SocialPref(Context paramContext, AttributeSet paramChar)
{
super(paramContext, paramChar);
//Use setWidgetLayoutResource to display the setting how you
//want it in the settings screen
setWidgetLayoutResource(R.layout.pref_social);
//Set the title of the setting
setTitle(R.string.SocialTitle);
//Set the summary for the setting
setSummary(R.string.SocialSummary);
//Here you set the title for the Dialog
setDialogTitle(R.string.SocialTitle);
//Here you declare the layout for the Dialog
setDialogLayoutResource(R.layout.pref_social_dialog);
setNegativeButtonText(R.string.Cancel);
}
//Void a,b,c,and d are called when each icon is pressed
//on the setting or when each list item is selected within the dialog.
//allowing the user to select each social site from the setting or the dialog.
//each action includes an intent that launches the corresponding social site.
private void a(View paramView, int paramInt)
{
if (paramView != null)
{
View localView = paramView.findViewById(paramInt);
if (localView != null)
localView.setOnClickListener(new View.OnClickListener()
{
public final void onClick(View paramView)
{
this.gPlus();
}
private void gPlus()
{
Dialog localDialog = getDialog();
if (localDialog != null)
localDialog.dismiss();
Context localContext = getContext();
if (localContext != null)
{
Intent localIntent = new Intent();
localIntent.setAction("android.intent.action.VIEW");
//Important: put your G+ page where it says "gplus_account_here" or it won't work
localIntent.setData(Uri.parse("https://plus.google.com/gplus_account_here"));
localContext.startActivity(localIntent);
}
}
});
}
}
private void b(View paramView, int paramInt)
{
if (paramView != null)
{
View localView = paramView.findViewById(paramInt);
if (localView != null)
localView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
this.faceBook();
}
private void faceBook()
{
Dialog localDialog = getDialog();
if (localDialog != null)
localDialog.dismiss();
Context localContext = getContext();
if (localContext != null)
{
Intent localIntent1 = new Intent();
localIntent1.setAction("android.intent.action.VIEW");
//Important: put your FaceBook id and page in their respective locations
//or it won't work.
localIntent1.setData(Uri.parse("fb://profile/profile_id"));
Intent localIntent2 = ac.a(localContext, localIntent1, false);
if (localIntent2 == null)
{
localIntent2 = new Intent();
localIntent2.setAction("android.intent.action.VIEW");
localIntent2.setData(Uri.parse("https://facebook.com/profile_page"));
}
localContext.startActivity(localIntent2);
}
}
});
}
}
private void c(View paramView, int paramInt)
{
if (paramView != null)
{
View localView = paramView.findViewById(paramInt);
if (localView != null)
localView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
this.twitter();
}
private void twitter()
{
Dialog localDialog = getDialog();
if (localDialog != null)
localDialog.dismiss();
Context localContext = getContext();
if (localContext != null)
{
Intent localIntent1 = new Intent();
localIntent1.setAction("android.intent.action.VIEW");
//Important: put your Twitter screen name where it says
//"screen_name_here" or it won't work
localIntent1.setData(Uri.parse("twitter://user?screen_name=screen_name_here"));
Intent localIntent2 = ac.a(localContext, localIntent1, false);
if (localIntent2 == null)
{
localIntent2 = new Intent();
localIntent2.setAction("android.intent.action.VIEW");
localIntent2.setData(Uri.parse("https://twitter.com/intent/user?screen_name=screen_name_here"));
}
localContext.startActivity(localIntent2);
}
}
});
}
}
private void d(View paramView, int paramInt)
{
if (paramView != null)
{
View localView = paramView.findViewById(paramInt);
if (localView != null)
localView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View paramView) {
this.youTube();
}
private void youTube()
{
Dialog localDialog = getDialog();
if (localDialog != null)
localDialog.dismiss();
Context localContext = getContext();
if (localContext != null)
{
Intent localIntent = new Intent();
localIntent.setAction("android.intent.action.VIEW");
//Important: Put your YouTube channel name where it
//says "username_here" or it won't work
localIntent.setData(Uri.parse("http://www.youtube.com/user/username_here"));
localContext.startActivity(localIntent);
}
}
});
}
}
//This instantiates the view for the dialog
//and allows each icon to be clickable
protected final View onCreateDialogView()
{
View localView = super.onCreateDialogView();
//For example: when a(localView, d.tv_social_gplus); is
//called, public void a(); is started taking the user
//to the related social site or app
a(localView, d.tv_social_gplus);
b(localView, d.tv_social_facebook);
c(localView, d.tv_social_twitter);
d(localView, d.tv_social_ytube);
return localView;
}
//This instantiates the view for the setting within the setting
//screen and allows each icon to be clicked, invoking
//the corresponding action.
protected final View onCreateView(ViewGroup paramViewGroup)
{
View localView = super.onCreateView(paramViewGroup);
a(localView, d.iv_social_gplus);
b(localView, d.iv_social_facebook);
c(localView, d.iv_social_twitter);
d(localView, d.iv_social_ytube);
return localView;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
然后创建一个名为“d”的空类来存储整数:
public final class d
{
public static final int iv_social_facebook = R.id.iv_social_facebook;
public static final int iv_social_gplus = R.id.iv_social_gplus;
public static final int iv_social_twitter = R.id.iv_social_twitter;
public static final int iv_social_ytube = R.id.iv_social_ytube;
public static final int tv_social_facebook = R.id.tv_social_facebook;
public static final int tv_social_gplus = R.id.tv_social_gplus;
public static final int tv_social_twitter = R.id.tv_social_twitter;
public static final int tv_social_ytube = R.id.tv_social_ytube;
}
这是设置的 xml,将其命名为“pref_social”:
<LinearLayout
android:gravity="center"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_gravity="center"
android:id="@+id/iv_social_ytube"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/value_margin_half"
android:src="@drawable/selector_ytube" />
<ImageView
android:layout_gravity="center"
android:id="@+id/iv_social_gplus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/value_margin_half"
android:src="@drawable/selector_gplus" />
<ImageView
android:layout_gravity="center"
android:id="@+id/iv_social_facebook"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/value_margin_half"
android:src="@drawable/selector_fb" />
<ImageView
android:layout_gravity="center"
android:id="@+id/iv_social_twitter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/value_margin_half"
android:src="@drawable/selector_twitter" />
</LinearLayout>
此 xml 是对话框的布局,将其命名为“pref_social_dialog.xml”:
<LinearLayout android:gravity="left" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/value_margin_half"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:gravity="left|center" android:id="@+id/tv_social_ytube" android:clickable="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/value_margin_half" android:text="@string/Social_YouTube" android:drawableLeft="@drawable/selector_ytube" android:drawablePadding="@dimen/value_margin" />
<View android:background="?android:listDivider" android:layout_width="fill_parent" android:layout_height="1.0dip" />
<TextView android:gravity="left|center" android:id="@+id/tv_social_gplus" android:clickable="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/value_margin_half" android:text="@string/Social_GooglePlus" android:drawableLeft="@drawable/selector_gplus" android:drawablePadding="@dimen/value_margin" />
<View android:background="?android:listDivider" android:layout_width="fill_parent" android:layout_height="1.0dip" />
<TextView android:gravity="left|center" android:id="@+id/tv_social_facebook" android:clickable="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/value_margin_half" android:text="@string/Social_Facebook" android:drawableLeft="@drawable/selector_fb" android:drawablePadding="@dimen/value_margin" />
<View android:background="?android:listDivider" android:layout_width="fill_parent" android:layout_height="1.0dip" />
<TextView android:gravity="left|center" android:id="@+id/tv_social_twitter" android:clickable="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/value_margin_half" android:text="@string/Social_Twitter" android:drawableLeft="@drawable/selector_twitter" android:drawablePadding="@dimen/value_margin" />
<View android:background="?android:listDivider" android:layout_width="fill_parent" android:layout_height="1.0dip" />
</LinearLayout>
为可绘制文件夹中的图标创建一个 xml 文件。这将在选择时更改图标。将其命名为“selector_fb.xml” 像这样为 YouTube、Twitter 和 GPlus 创建相同的文件:“selector_ytube.xml”、“selector_twitter.xml”、“selector_gplus.xml”
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="false" android:drawable="@drawable/fb" />
<item android:state_pressed="true" android:drawable="@drawable/fb_pressed" />
</selector>
您必须使用自己的图像。只需确保所选图像是灰度图像,并且所有图像的大小都适合每种尺寸的设备。希望这对其他人有帮助。
关于android - 如何更改 Android 动态壁纸中对话框首选项的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292512/
SO亲爱的 friend 们: 2014 年 3 月 18 日。我正在处理一种情况,在使用 ng-repeat 时,数组内的元素(我从 Json 字符串中获取)更改了原始顺序。 需要明确的是,数组中的
有很多问题询问如何在 JavaScript 单击处理程序中更改 div 的类,例如,此处:Change Div style onclick .我理解得很好(只需更改 .className),并且它有效
我从access导入了一个数据库到mysql,但其中一个表的列名“股数”带有空格,但我尝试更改、替换甚至删除列名,但失败了。任何人都可以帮助解决这一问题 String UpdateQuary = "U
我正在做一个随机的学校元素。 目前,我有一个包含两个 CSS 的页面。一种用于正常 View ,一种用于残障人士 View 。 此页面还包括两个按钮,它们将更改使用的样式表。 function c
我需要使用 javascript 更改 HTML 元素中的文本,但我不知道该怎么做。 ¿有什么帮助吗? 我把它定义成这样: Text I want to change. 我正在尝试这样做: docum
我在它自己的文件 nav_bar.shtml 中有一个主导航栏,每个其他页面都包含该导航栏。这个菜单栏是一个 jQuery 菜单栏(ApyCom 是销售这些导航栏的公司的名称)。导航栏上的元素如何确定
我正在摆弄我的代码,并开始想知道这个变化是否来自: if(array[index] == 0) 对此: if(!array[index] != 0) 可能会影响任何代码,或者它只是做同样的事情而我不需
我一直在想办法调整控制台窗口的大小。这是我正在使用的函数的代码: #include #include #define WIDTH 70 #define HEIGHT 35 HANDLE wHnd;
我有很多情况会导致相同的消息框警报。 有没有比做几个 if 语句更简单/更好的解决方案? PRODUCTS BOX1 BOX2 BOX3
我有一个包含这些元素的 XELEMENT B Bob Petier 19310227 1 我想像这样转换前缀。 B Bob Pet
我使用 MySQL 5.6 遇到了这种情况: 此查询有效并返回预期结果: select * from some_table where a = 'b' and metadata->>"$.countr
我想知道是否有人知道可以检测 R 中日期列格式的任何中断的包或函数,即检测日期向量格式更改的位置,例如: 11/2/90 12/2/90 . . . 15/Feb/1990 16/Feb/1990 .
我希望能够在小部件显示后更改 GtkButton 的标签 char *ButtonStance == "Connect"; GtkWidget *EntryButton = gtk_button_ne
我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。 目前,我可以从 SD
注意到这个链接后: http://www.newscientist.com/blogs/nstv/2010/12/best-videos-of-2010-progress-bar-illusion.h
我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: add buttons to push notification alert 是否可以在远程通知显示的警报框中指定有
当您的 TabBarController 中有超过 5 个 View Controller 时,系统会自动为您设置一个“更多” View 。是否可以更改此 View 中导航栏的颜色以匹配我正在使用的颜
如何更改.AndroidStudioBeta文件夹的位置,默认情况下,该文件夹位于Windows中的\ .. \ User \ .AndroidStudioBeta,而不会破坏任何内容? /编辑: 找
我目前正在尝试将更具功能性的编程风格应用于涉及低级(基于 LWJGL)GUI 开发的项目。显然,在这种情况下,需要携带很多状态,这在当前版本中是可变的。我的目标是最终拥有一个完全不可变的状态,以避免状
我是一名优秀的程序员,十分优秀!