我正在创建一个应用程序,其资源可以重复使用(因为按钮总是相同,但是镜像或旋转).我确实想要使用相同的资源,所以我不必再添加3个与原始资源完全相同但又已旋转的资源.但我也不想将代码与可以在XML中声明的内容混合,或者使用会花费处理时间的矩阵进行转换.
我在XML中声明了一个两个状态按钮.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/and_card_details_button_down_left_onclick" /> <!-- pressed -->
<item android:drawable="@drawable/and_card_details_button_down_left" /> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)
我想重复使用drawable,因为它会相同但旋转90º和45º并且我将按钮分配为drawable.
<Button android:id="@+id/Details_Buttons_Top_Left_Button"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/details_menu_large_button" />
Run Code Online (Sandbox Code Playgroud)
我知道我可以用一个RotateDrawable或一个旋转它,Matrix但正如我已经解释过的那样,我不喜欢这种方法.
是否有可能直接在XML上实现这一点,或者您认为最好的方法是什么?放置所有资源但旋转,在代码中旋转它们?
---编辑--- @dmaxi的答案很棒,这是如何将它与项目列表相结合:)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<rotate
android:fromDegrees="90"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:drawable="@drawable/and_card_details_button_up_onclick"/>
</item>
<item>
<rotate
android:fromDegrees="90"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:drawable="@drawable/and_card_details_button_up_onclick"/>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud) 我开始在javascript开发中,做了一个简单的项目,使用node.js作为rest API和使用主干的客户端,一切看起来都很完美,直到我想从我的js中获取我的模板.
我找到了不同的方法,其中一些有一些时间(比如一岁),但我无法理解哪一种可能更好:
带有带html代码的var的.js文件
专业 - >易于加载,易于传递到下划线来编译它.
缺点 - > scape每一行.
app.templates.view = " \
<h3>something code</h3> \
";
Run Code Online (Sandbox Code Playgroud)
加载模板:
template: _.template(app.templates.view)
Run Code Online (Sandbox Code Playgroud)使用require.js加载文本插件.
专业 - >根据需要加载不同的模板.
cons - >我不喜欢将所有内容放入"加载器"功能的方法......
define(["TemplateEngine", "text!templates/template.html"], function(...
Run Code Online (Sandbox Code Playgroud)使用AJAX请求加载模板的函数.
专业 - >您可以加载所需的模板并添加本地存储空间.
cons - >似乎我必须将所有模板合并到一个生成环境的文件中.
function() {
var templateLoader = {... $.get calls ...}
Run Code Online (Sandbox Code Playgroud)http://api.jquery.com/jQuery.template/
似乎需要是最好的方法,但也许我错过了一些东西,我不想让事情尽可能干净,因为我在学习/玩乐阶段:D
任何有良好结构或任何亮点的好文章或github项目都将受到赞赏.
谢谢.
请原谅任何重大的拼写错误,而不是英语发言者:)
--EDIT--发现了一些有趣的视频,了解如何使用require.js启动和包装内容 http://www.youtube.com/watch?v=VGlDR1QiV3A
我试图制作一个可以在点击时被解雇的DialogFragment,经过一些搜索我决定采用这种实现方式:
public class ErrorDialogFragment extends RoboDialogFragment {
private static final String MESSAGE_ARG = "message";
private TextView text;
public ErrorDialogFragment newInstance (String message){
ErrorDialogFragment f = new ErrorDialogFragment();
Bundle args = new Bundle();
args.putString(MESSAGE_ARG, message);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.error_dialog_fragment, container, false);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ErrorDialogFragment.this.dismiss();
}
});
text = (TextView) v.findViewById(R.id.error_dialog_text_textView);
text.setText(getArguments().getString(MESSAGE_ARG));
return v;
}
@Override
public void onCreate(Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud) 我试图实现一个组件来为按钮或其他组件制作自定义阴影,我知道使用9patch或带有阴影的png会更容易,但我想在其状态下以编程方式更改颜色和大小(按下,等等,所以我决定尝试9个图像,全部是XML格式,所以阴影色调从组件的一侧开始渐变.
<!-- Left Shadow layer -->
<item>
<shape android:shape="rectangle" >
<gradient
android:angle="0"
android:endColor="#FFFF0000"
android:startColor="#00FF0000" />
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
它看起来很好,问题是在角落和android:gradientRadius参数现在它设置为固定大小,但在上下文帮助据说可以设置为基本大小10%或父级大小10%的百分比p,我想要它设置一个100%的半径,所以渐变总是从主颜色开始,然后消失在正方形的边缘.
- 编辑 -
关于gradientRadius gradientRadius的android文档
<shape android:shape="rectangle" >
<gradient
android:endColor="#00FF0000"
android:startColor="#FFFF0000"
android:gradientRadius="18"
android:centerX="100%"
android:centerY="100%"
android:type="radial" />
</shape>
Run Code Online (Sandbox Code Playgroud)
那就是我现在:(我不知道如何设置这个大小以适应其父视图.
任何帮助将不胜感激,当我完成组件我将把代码放在答案:)所以典型的按钮可以在xml中具有可自定义的阴影.
应得组件的图像.
- 编辑 -
我仍然对此感兴趣:)没有人有线索?

我正在开发一个简单的应用程序,其结构在活动和碎片中,这是使其可访问的要求之一,所以我做了所有的内容描述,导航,焦点等.
它的效果很好,除了片段,如果有一个活动加载一个片段,对讲读取其内容,那么用户点击一些东西和一个可以添加到堆栈顶部的细节片段.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
audios = AudiosListFragment.newInstance(params);
ft.add(R.id.audios_fragment_holder, audios);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
如果用户继续导航对讲仍然记住丢失片段的每个元素的位置.
有没有办法清除事件的辅助功能列表并强制它再次获取它?可访问性管理器似乎没有任何方法.
AccessibilityManager manager = (AccessibilityManager) getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
manager.getAccessibilityServiceList();
Run Code Online (Sandbox Code Playgroud)
- 编辑 - 我尝试过但没有成功的事情.
从片段中的视图创建发送事件.
AccessibilityEvent event =
AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
AccessibilityDelegate delegate = new AccessibilityDelegate();
v.setAccessibilityDelegate(delegate);
delegate.dispatchPopulateAccessibilityEvent(container, event);
Run Code Online (Sandbox Code Playgroud)
中断片段的onResume上的所有待处理文本.
AccessibilityManager mgr = (AccessibilityManager)
getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
mgr.interrupt();
Run Code Online (Sandbox Code Playgroud)
请求装饰器视图注册window_content_change或window_state_change事件.
getWindow().getDecorView()
.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
Run Code Online (Sandbox Code Playgroud)
- 编辑 - 制作了一个DumpView层次结构,并且没有被解散的片段的痕迹,但是对讲的剧照导航它:(
谢谢,我希望有人可以对这个问题有所了解:)
问候.
我只是尝试匕首而不是roboguice,到目前为止,刀具很棒很简单,指向它:)
但另一方面,匕首我发现它比roboguice更不易配置,我必须进行基准测试是否值得改变,但在这种情况下我正在研究如何注入东西,比如Adapters,这就是我做的,它的工作原理:
public class PeopleAdapter extends BaseAdapter {
private static final String TAG = PeopleAdapter.class.getName();
@Inject
TempoSharedPreferences prefs;
private LinkedList<People> elements;
public PeopleAdapter (LinkedList<People> elements, TempoApplication app) {
this.elements = elements;
app.inject(this);
Log.d(TAG, "registered: " + prefs.isRegistered());
} ....
Run Code Online (Sandbox Code Playgroud)
但是在创建这个实例的Activity上我必须得到一个允许注入的应用程序,每次使用该依赖项的类时我都必须添加到模块中,roboguice为我做了所有这些并且只有一个入口点修改东西.
我做错了什么?有没有更好的方法来进行这种注射?避免在模块上声明每个类?
@Module(injects = {
MainActivity.class,
PeopleAdapter.class
},
library = true)
public class AndroidModule { ....
Run Code Online (Sandbox Code Playgroud)
我会很感激任何评论或最佳实践或经验.
谢谢!
我很高兴编码和学习骨干这个#〜@@!发生了!
我使用require将我的观点与模型等分开.
在我的Backbone视图中,我处理这些事件:
define(['...'],function(...) {
var DishView = Backbone.View.extend({
template: _.template(dish),
tagName: 'div',
id: 'dish',
initialize: function() {
console.log('initializing dishView');
this.model.on('change', this.render, this);
},
render: function(){
console.log('rendering dishView');
this.$el.html(this.template(this.model.toJSON()));
return this;
},
events: {
'click #relations-menu .newItem': 'launch_modal_relations',
'click #delete' : 'delete_dish',
'click #save-basic-changes': 'save_basic',
'drop #dropPicture' : 'dropHandler',
'dragenter #dropPicture' : 'alertMe'
},
alertMe: function () {
console.log('clicked on image');
},
delete_dish: function () {
this.model.deleteMyself();
Backbone.history.navigate('/', {trigger: true});
},
save_basic: function (event) {
var name = $('#inputName').val();
var …Run Code Online (Sandbox Code Playgroud) android ×5
android-xml ×2
backbone.js ×2
requirejs ×2
ajax ×1
dagger ×1
dialog ×1
drawable ×1
events ×1
java ×1
javascript ×1
jquery ×1
node.js ×1
talkback ×1