我无法使用预定义的样式设置Button的文本颜色.我一定很遗憾.例如,我有一个按钮:
<Button
android:id="@+id/calculate_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/calculate"
android:background="@drawable/rounded_bottom_shape"
android:padding="5dp"
android:textAppearance="@style/CalcResultStyle">
</Button>
Run Code Online (Sandbox Code Playgroud)
相应的风格是:
<style name="CalcResultStyle">
<item name="android:textSize">12sp</item>
<item name="android:textColor">#FFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)
尺寸部分工作正常,但颜色没有.我发现的唯一解决方法是在实际按钮上设置textColor,这意味着更改多个按钮上的颜色会变得很麻烦.我也喜欢使用颜色参考(例如@ color/Brown)在我的样式中设置textColor属性,但是使用引用或显式设置颜色似乎没有区别.
我无法弄清楚如何确定生活在json数组中的元素是否为null.要检查jsonObject本身是否为null,您只需使用:
jsonObject.isNullObject();
Run Code Online (Sandbox Code Playgroud)
但是当对象是一个数组并且我想检查该数组中的一个元素是否为null时,这不起作用:
jsonArray.get(i).get("valueThatIsNull") == null;
Run Code Online (Sandbox Code Playgroud)
在数组的元素上也没有可用的isNull方法.如何检查jsonarray中的值是否为空?知道我从javascript传递一个null对象可能会有所帮助.也许null在java中以json格式从javascript传递时并不意味着同样的事情,但我也尝试在null周围加上括号,但它仍然不起作用.
我发布了一些实际的源代码,以帮助更清楚.jsonObject是jsonArray的一部分,对象有多个值,因为它是一个对象.
JSONObject mapItem = jsonArray.getJSONObject(i);
int id = mapItem.has("id") ? mapItem.getInt("id") : -1;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
Date sqlDate = null;
if(mapItem.has("date")) {
String dateStr = mapItem.getString("date");
if(!dateStr.equals("null")) {
date = dateFormat.parse(mapItem.getString("date").substring(0, 10)); //Convert javascript date string to java.
sqlDate = new Date(date.getTime());
}
Run Code Online (Sandbox Code Playgroud) 在我的情况下,我正在查询数据库以获取特定的回报(在这种情况下,基于用户名的注册信息).
//Build SQL String and Query Database.
if(formValid){
try {
SQL = "SELECT * FROM users WHERE username=? AND email=?";
Collections.addAll(fields, username, email);
results = services.DataService.getData(SQL, fields);
if (!results.next()){
errMessages.add("User account not found.");
} else {
user = new User();
user.fillUser(results); //Is it ok to pass ResultSet Around?
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
services.DataService.closeDataObjects(); //Does this close the ResultSet I passed to fillUser?
}
}
Run Code Online (Sandbox Code Playgroud)
因此,一旦我查询数据库,如果找到结果,我创建一个新的User对象并用我从数据库收到的数据填充它.我曾经在我将结果集拉入的方法中直接执行所有这些操作,但我意识到我在整个项目中都进行了大量的冗余编码,因此我将其全部移动到一个存在于实际User bean中的中心方法中.
public void fillUser(ResultSet data) throws SQLException{
setUserId(data.getInt("id"));
setFirstName(data.getString("first_name")); …Run Code Online (Sandbox Code Playgroud) 假设我有一个包装器div,overflow:hidden上面有一个div,它位于可见部分的下方.如何获得内部div的可见高度?
<div id="wrapper" style="overflow: hidden; height:400px;">
<div id="inner">
<!--Lots of content in here-->
</div>
<div>
Run Code Online (Sandbox Code Playgroud)
我尝试获取内部div的高度的每个方法都返回包括隐藏部分的完整高度,即2000px.我希望能够获得仅可见部分的高度,因此在此示例中为400px.
我知道我可以得到它的高度parentNode,但在生产中,内部div可能不是第一个孩子.因此可能有其他div将它们分开,因此高度#inner将为400 - 无论它与它之间的元素偏移如何#wrapper.
没有外部库,是否有图书馆或方法?我使用apache james作为我的邮件服务器,目前发送这样的电子邮件:
public void sendMessage(String to, String subject, String content) {
MimeMessage message = new MimeMessage(session);
try {
message.addRecipients(Message.RecipientType.TO, to);
message.setFrom(new InternetAddress(from));
message.setSubject(subject);
message.setContent(content, "text/html; charset=utf-8");
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但我想事先用DKIM与电子邮件签名.我知道我需要在james服务器上实现DKIM签名并计划使用jDKIM来实现这一点,我也理解我需要使用像www.port25.com这样的东西来创建密钥,但是如何在java之前实际签署电子邮件我发了出去?
现在我已经做了一些研究,我明白我需要将我的依赖外部jar放在web-inf/lib文件夹中,用于eclipse中的动态web项目.不幸的是,到目前为止,我只是在eclipse中的构建路径中导入它们,然后再次在我的测试服务器的运行时配置中导入它们.
是否有一种简单的方法可以在导出时将所有相关的jar复制到web-inf/lib文件夹,还是我必须手动查找每个,并将其放在文件夹中?在开发过程中是否有更好的方法来管理外部jar,所以我不必关心将它们导入构建路径,然后是运行时,然后是库文件夹?我已经尝试使用Project >> Properties >> Java Build Path >> Order and Export并检查所有的jar,但它们似乎仍然没有随战争导出.
我正在使用tomcat作为我的生产服务器,并且由于日志文件中的defclassnotfounderror而无法启动项目时想出了所有这些.
有没有其他人在ubuntu(或可能的任何其他Linux环境)中注意到这一点?单击X不会关闭模拟器.每次我使用它时,我都必须手动使用系统监视器来终止进程.
关于我为什么尝试这样做的一些信息:我正在使用ActivityGroups从tabHost活动中打开一个活动,并将新活动保留在选项卡下.那部分我有.但是当进入那个新活动时,如果我使用后退按钮,它会让我直接从标签活动开始,所以我必须点击几次才能回到原来的位置.
有没有办法设置后退按钮转到特定活动而不是杀死当前活动窗口?
我正在尝试使用jQuery监听器来监听用户对html主体的点击并执行特定功能,如果已经点击了身体上的任何位置,除了特定div和该div中的子项.
我们的想法是div是一个弹出式元素,而不是必须有一个用户可以点击的关闭按钮,他们应该只能点击除该div之外的页面上的任何地方,它将自动关闭.
我一直在使用这个监听器:
var initialClick = false;
$('body').on('click.addPhoneListeners', function(event) {
var target = EventUtility.getTarget(event);
if(initialClick) {
if(target.parentNode.id != clone.id && target.id != '') {
finish();
};
}
initialClick = true;
});
Run Code Online (Sandbox Code Playgroud)
它会监听正文上的所有点击,除非点击来自我希望用户能够与之交互的元素,否则它会关闭.不幸的是,这仅适用于只有一级孩子的div.一旦我开始获得多个层次结构,例如:
<div id="addressContainer">
<div id="address" class="hidden row">
<div class="row">
<div id="address.primary" class="hidden">P</div>
<div id="address.type"></div>
<div id="address.street"></div>
<div id="address.editButton" class="hidden"><a id="addressEditButton">Edit</a></div>
<div id="address.deleteButton" class="hidden"><a id="addressDeleteButton">Delete</a></div>
</div>
<div class="row">
<div id="address.city"></div>
<div id="address.state"></div>
<div id="address.zip"></div>
</div>
<input type="hidden" id="address.id"></input>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
target.parentNode.id为我提供了对象父元素而不是addressContainer id,因此不起作用.是否在嵌套元素中使用顶级父级?其他元素将使用相同的代码,因此它必须处理两个div只有一个级别和div有多个.
更新:发现一些优秀的解决方案,谢谢你们.但我有另外一个问题.请参阅上面的代码,我将initialClick布尔值设置为false,然后将其设置为true.我这样做是因为出于某些原因,如果我不这样做,当我去添加弹出div时,用于设置弹出窗口的按钮的初始点击会触发监听器并在我有机会做任何事情之前关闭弹出窗口.这是我解决问题的方法,但这是唯一的方法吗?或者我只是设置听众略有错误?
我正在尝试设置一个侦听所有焦点事件的侦听器.特别是我试图在输入或文本框获得焦点的任何时候倾听.根据一些研究,广泛接受的实现方法是这样的:
document.body.onfocus = function(event) {
//Check the event.target for input/textbox
//Do something
};
Run Code Online (Sandbox Code Playgroud)
但是document.body.onfocus似乎并没有激发.我认为这可能是因为该文档实际上并没有获得焦点,所以我尝试了:
document.body.focus();
Run Code Online (Sandbox Code Playgroud)
最初"设定"焦点,但这也不起作用.
关于如何在所有输入/文本框上听取焦点事件而不直接在元素本身上设置事件的任何想法?香草javascript只请,我没有使用框架.
根据接受的答案,这里有一些工作代码:
var focusHandler = function(event) {
var type = event.target.nodeName.toLowerCase();
if(type == 'input' || type == 'textarea') {
//Do something
}
};
document.body.addEventListener('focus', focusHandler, true); //Non-IE
document.body.onfocusin = focusHandler; //IE
Run Code Online (Sandbox Code Playgroud)