首页 文章 精选 留言 我的

精选列表

搜索[项目自动化构建工具],共10000篇文章
优秀的个人博客,低调大师

[android更新类的内容开发APP]四、项目布局的基本功能(继续)

昨天,只拿到电脑,别说,眼泪 http://joveth.github.io/funny/ 1.选项卡的滑动效果 要知道。用这个选项卡就是想让它滑动起来,不然的话。我才不喜欢用它呢。 在让他滑动之前,先来说一下上一张 的问题。话说。依照设计器下载下来的包,替换到 我们的 res之后,我发现,tabhost的选项颜色没有变,在我尝试 了各种方法之后,最终,我tm放弃了,好吧。正好 找到了这个滑动效果的demo,还有选项卡的颜色切换效果。 话不多说 ,改进我们的东西吧。 1.改动我们的 acitivity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TabHost android:id="@+id/tab_host" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="48dp" android:background="@drawable/tab_widget_bg" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 隐藏 --> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" > <fragment android:id="@+id/fragment_image" android:name="com.jov.germany.frame.ImageFrame" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_text" android:name="com.jov.germany.frame.TextFrame" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_both" android:name="com.jov.germany.frame.BothFrame" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> </LinearLayout> </TabHost> </LinearLayout> 这里面加入了viewpage。还有把FramLayout隐藏了 当中的布局文件: res/color/tab_widget_text.xml <?xml version="1.0" encoding="utf-8"?> <!-- 标签页tab 文字切换颜色 --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/color_orange"/> <item android:color="#000"/> </selector> value/color.xml中加入: <color name="color_orange">#FF9224</color> 为啥是橘黄,我……假设你不喜欢,百度HTML颜色代码表,找一个你 自己的最爱 在来改动我们的 MainAcitivity.java package com.jov.germany; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; import android.widget.TabHost.TabContentFactory; import android.widget.TabHost.TabSpec; import android.widget.TextView; public class MainActivity extends FragmentActivity { public static final String PAGE1_ID = "page1"; public static final String PAGE2_ID = "page2"; public static final String PAGE3_ID = "page3"; private TabHost tabHost; // TabHost private List<View> views; // ViewPager内的View对象集合 private FragmentManager manager; // Activity管理器 private ViewPager pager; // ViewPager @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化资源 pager = (ViewPager) findViewById(R.id.viewpager); tabHost = (TabHost) findViewById(R.id.tab_host); manager = getSupportFragmentManager(); views = new ArrayList<View>(); views.add(manager.findFragmentById(R.id.fragment_image).getView()); views.add(manager.findFragmentById(R.id.fragment_text).getView()); views.add(manager.findFragmentById(R.id.fragment_both).getView()); // 管理tabHost開始 tabHost.setup(); // 传一个空的内容给TabHost,不能用上面两个fragment TabContentFactory factory = new TabContentFactory() { @Override public View createTabContent(String tag) { return new View(MainActivity.this); } }; // tab1 TabSpec tabSpec = tabHost.newTabSpec(PAGE1_ID); tabSpec.setIndicator(createTabView(R.string.fragment_image_str)); tabSpec.setContent(factory); tabHost.addTab(tabSpec); // tab2 TabSpec tabSpec2 = tabHost.newTabSpec(PAGE2_ID); tabSpec2.setIndicator(createTabView(R.string.fragment_text_str)); tabSpec2.setContent(factory); tabHost.addTab(tabSpec2); // tab3 TabSpec tabSpec3 = tabHost.newTabSpec(PAGE3_ID); tabSpec3.setIndicator(createTabView(R.string.fragment_both_str)); tabSpec3.setContent(factory); tabHost.addTab(tabSpec3); tabHost.setCurrentTab(0); // 管理tabHost结束 // 设置监听器和适配器 pager.setAdapter(new PageAdapter()); pager.setOnPageChangeListener(new PageChangeListener()); tabHost.setOnTabChangedListener(new TabChangeListener()); } /** * PageView Adapter * * @author Administrator * */ private class PageAdapter extends PagerAdapter { @Override public int getCount() { return views.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup view, int position, Object arg2) { view.removeView(views.get(position)); } @Override public Object instantiateItem(ViewGroup view, int position) { try { if (views.get(position).getParent() == null) { view.addView(views.get(position)); } else { ((ViewGroup) views.get(position).getParent()) .removeView(views.get(position)); view.addView(views.get(position)); } } catch (Exception e) { e.printStackTrace(); } return views.get(position); } } /** * 标签页点击切换监听器 * * @author Administrator * */ private class TabChangeListener implements OnTabChangeListener { @Override public void onTabChanged(String tabId) { if (PAGE1_ID.equals(tabId)) { pager.setCurrentItem(0); } else if (PAGE2_ID.equals(tabId)) { pager.setCurrentItem(1); } else if (PAGE3_ID.equals(tabId)) { pager.setCurrentItem(2); } } } /** * ViewPager滑动切换监听器 * * @author Administrator * */ private class PageChangeListener implements OnPageChangeListener { @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { tabHost.setCurrentTab(arg0); } } /** * 创建tab View * * @param string * @return */ private View createTabView(int stringId) { View tabView = getLayoutInflater().inflate(R.layout.tab, null); TextView textView = (TextView) tabView.findViewById(R.id.tab_text); textView.setText(stringId); return tabView; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 当中的 layout/tab.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/state_tabs_bg" > <TextView android:id="@+id/tab_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="11dp" android:layout_gravity="center_horizontal" android:textSize="18sp" android:textColor="@color/tab_widget_text"/> </LinearLayout> drawable/state_tabs_bg.xml <?xml version="1.0" encoding="utf-8"? > <!-- tab每一个标签背景 --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tabs_selected_bg" /> <item android:drawable="@drawable/tabs_normal_bg"></item> </selector> drawable/tabs_selected_bg.xml <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape> <solid android:color="@color/color_orange" /> </shape> </item> <item android:bottom="5dp"> <shape> <solid android:color="#eeeeee" /> </shape> </item> </layer-list> drawable/tabs_normal_bg.xml <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape> <solid android:color="@color/color_orange" /> </shape> </item> <item android:bottom="1dp"> <shape> <solid android:color="#eeeeee" /> </shape> </item> </layer-list> 好至此的话 我们的代码算是ok了,可是当你执行的时候却发现跑不起来。为啥 呢??? 且看一下我们的Frame里面,改动 ImageFrame.java: package com.jov.germany.frame; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.jov.germany.R; public class ImageFrame extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.image_frame, container, false); } } 你可能会认为没什么差别,看一下我们的Fragment引用的包,不一样哦。 好吧,最后 MainAcitivity.java中的String内容自己 在string.xml里面自己加把 没有截滑动效果。 近期各种忙,更新的 有点慢,没办法啊 源代码这里 版权声明:本文博客原创文章,博客,未经同意,不得转载。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4651652.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

一个物联网项目创业失败的年轻人:别让后座司机开车

后座司机(Back-seat Driver) 是一个没有实际控制方向盘,却过分地评论司机的行为与决策,企图控制该车辆的乘客——Wikipedia 几天前与一位来 AppWorks 应征的优秀年轻人面试,他说他之前与朋友在硅谷创业一年,可惜最终失败了,因此决定来 AppWorks 磨练,累积实力,未来再挑战一次。 问他为什么失败,他说创业不久,他们就积极开始与创投接触。因为做的是正火的物联网题目,创投都非常有意愿见他们。但谈到投资,投资人就开始退缩,毕竟目前为止,物联网的成功退场案例很有限。 他们进一步请教创投,那到了什么样的进度,投资人会愿意入股。创投说等到他们把真的可以运作的样品做出来,就会进一步支持。 于是他们回去花了三个月把这个 Working Prototype 做出来,心想这下可以拿到钱了,兴奋的回去找创投。可惜,创投非但没有把支票本拿出来,居然又说他认为生产风险很高 (注一),叫他们去把量产的可行性与成本结构搞清楚,才要投资。 几个年轻人想想也对,搞清楚成本才知道要募多少钱,于是赶快开始与中国硬件制造商联络、探讨。又搞了三个月,他们终于把量产的时程、技术、成本通通都弄清楚了,想说这下终于要拿到一笔钱,把这产品真的做出来了。他们满怀期待的回去见创投,结果创投居然还是没在支票上签名。相反的,VC又说担心这产品的市场风险,叫几个小伙子先去跟通路谈谈,确认有人愿意下单,他就会拿钱出来投资。 几个年轻人想想也对,先确认市场需求非常重要。虽然银行存款快花完了,但最后这一步也做到,创投就没有风险了,一定会把钱打进来的。胜利在望,兄弟们冲吧! 小伙子们开始四处找人介绍零售商、经销商,努力说服通路上架他们这个创新产品。可惜这事没有很顺利,稍具规模的通路都说这产品竞争者太多、特殊性缺乏市场验证,品牌又没有知名度,不敢合作。 东奔西跑三个月,终于从独立通路拿到几张小订单。他们想这也还算是个机会,只要先把产品做出来,透过这几个通路销售,成绩一定会很好,到时候再反攻大通路。 更重要的,这下万事俱备只欠东风,几乎没有风险,创投总该拿钱出来了吧。结果他们又回去找这些VC,想不到创投非但没把钱拿出来,居然还劝他们赶快改题目,说这个产品看来太利基,缺乏规模化的潜力,终究只会是一个小确幸的「休闲事业」。(注二) 几个人当场傻眼,经过了近一年的努力,居然又回到原点。这时他们银行账户几乎见底,但还是想把产品生产出来满足那几张订单。他们试着去跟亲友、天使募资,但还是凑不到第一批小量生产所需要的费用。最终,弹尽援绝的几个小伙子,只好决定放弃。 Lessons Learned 我问他这段经验他学到了什么,他说千万别让后座司机开你的车。我说这创投根本还没上车 (注三),顶多只是加油站老板,他笑说那更不该迷信他的导航。 更重要的,他说,是他们搞错了创业的重点。在早期,最重要的是确认产品的市场性,而不是确认这题目有没有人要投资。即便得到创投的认可,90%以上的新创公司还是会失败。因此,从一开始就不该把VC的认同当作一个目标。 还有,他补充,没有达到Product-Market Fit,就急着去确认成本、通路,也是本末倒置。下次如果再创业,他一定什么都不管,先利用社群媒体、Kickstarter等平台,充分验证产品后,才会去找生产、零售、资本的伙伴。 我回说这些宝贵的观念,许多创业者要花三、五年碰壁,才会真的领悟,你能够在24岁的年纪就成功解开,算是进度很快了。 他苦笑谢谢我的安慰。但我其实是非常认真的。 ※注一:别怀疑,无论是中国或是硅谷,多数的创投都不是很敢冒险的投资人 ※注二:在美国,创投用 Lifestyle Business 来形容只能赚小钱、长不大的生意 ※注三:通常后座司机指的是已经成为股东,但管很多的投资人 本文转自d1net(转载)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册