转载地址:http://blog.csdn.net/aa2967277/article/details/50617677

AndroidTV应用开发简介

目前,网上还没有对AndroidTV的足够的介绍。在本系列教程中,将介绍如何开发AndroidTV应用程序。此篇文章的主要目的是了解AndroidTV的UI实现。

AndroidTV的UI和Android手机App的UI有很大的差异,在AndroidTV中,我们只能用↑↓←→键对应用进行操作,而不是触摸屏幕进行操作。要达到这个要求,Android开源项目提供 Leanback Support library (android.support.v17.leanback)支持库,我们可以基于Leanback库实现适用于AndroidTV用户的操作界面,本教程主要讲解Leanback库的使用。

本系列教程的程序都是基于AndroidStudio进行开发,请下载安装使用AndroidStudio下载

此教程使用人群:
  • 有开发Android应用的经验
  • 技能等级—中级

创建一个AndroidTV应用程序

1.打开AndroidStudio

New Project

选择AndroidTV

选择“Add No Activity”并且Finish

AndroidStudio自动完成创建程序

2.添加一个Activity

首先,我们要添加一个Activity,右击创建的项目“com.corochann.androidtvapptutorial”,选择→New→Activity→Blank activity,选择Launcher Activity。 
会自动命名为MainActivity。 
AndroidStudio会创建两个文件,一个MainActivity.class和activity_main.xml。

我们在创建Activity的时候,我们也可以找到Android TV Activity,但是我们不选择这个,因为它会同时创建出很多文件。当然,如果你能看懂,它们是很有帮助的,但是对于初次接触的我们来说,要看懂这些东西是很困难的。在此系列文章中,我们会逐步创建这些文件,从而了解他们的用法。 
接下来,我们就开始UI的设计。

3.添加一个Fragment

右击你的包名 
New→Java Class→Name:MainFragment

同样的,如果我们选择创建一个Fragment→Blank fragment,它也会创建很多代码出来。

首先,我们编译我们的 activity_main.xml让它只包含mainfragment.

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_browse_fragment"
android:name="com.corochann.androidtvapptutorial.MainFragment" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity" tools:deviceIds="tv"
tools:ignore="MergeRootFrame" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

将MainFragment修改如下 
我们让MainFragment继承BrowseFragment,BrowseFragment是有AndroidSDK提供的,我们可以通过这个教程看到它是怎样作为AndroidTV的标准UI的。

package com.corochann.helloandroidtvfromscrach;

import android.os.Bundle;
import android.support.v17.leanback.app.BrowseFragment;
import android.util.Log; public class MainFragment extends BrowseFragment {
private static final String TAG = MainFragment.class.getSimpleName(); @Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "onActivityCreated");
super.onActivityCreated(savedInstanceState); }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行此程序 

BrowseFragment由HeadersFragment和RowsFragment组成,在我们这个程序中,右边黑色的部分就是HeadersFragment,左边的部分是RowsFragment,下面我们会说到如何设计HeadersFragment和RowsFragment。

4.在MainFragment.java中添加一个方法setupUIElements()

我们将添加一个setupUIElements()方法,来给程序添加更多的信息。

   @Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "onActivityCreated");
super.onActivityCreated(savedInstanceState); setupUIElements(); } private void setupUIElements() {
// setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.videos_by_google_banner));
setTitle("Hello Android TV!"); // Badge, when set, takes precedent
// over title
setHeadersState(HEADERS_ENABLED);
setHeadersTransitionOnBackEnabled(true); // set fastLane (or headers) background color
setBrandColor(getResources().getColor(R.color.fastlane_background));
// set search icon color
setSearchAffordanceColor(getResources().getColor(R.color.search_opaque));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

上面的代码中,我们设置了应用的标题和图标,还有BrandColor。 
颜色信息来自color.xml,我们现在来创建一个 
New→values Resource file 
文件名称:color.xml 
代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="fastlane_background">#0096e6</color>
<color name="search_opaque">#ffaa3f</color>
</resources>
  • 1
  • 2
  • 3
  • 4
  • 5

运行程序: 

5.编译Android Manifest

你会发现在AndroidTV上没有你的应用程序图标,我们需要在Android Manifest中作一些声明

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.corochann.androidtvapptutorial" > <!-- TV app need to declare touchscreen not required -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" /> <!--
true: your app runs on only TV
false: your app runs on phone and TV -->
<uses-feature
android:name="android.software.leanback"
android:required="true" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback" >
<activity
android:name=".MainActivity"
android:icon="@drawable/app_icon_your_company"
android:label="@string/app_name"
android:logo="@drawable/app_icon_your_company" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

把app_icon_your_company放在main/res/drawble/folder下,运行程序。

在launcher中显示活动图标

在Manifest里面设置intent-filter

<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  • 1

同时,也要在Activity里面声明

<activity
android:name=".MainActivity"
android:icon="@drawable/app_icon_your_company"
android:label="@string/app_name"
android:logo="@drawable/app_icon_your_company" > ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在launcher上显示应用程序图标

通过设置application进行显示

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback" > ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意:活动图标和应用程序图标是不同的 
 
如果想更清楚的弄懂AndroidTV中的Manifest,请查看官方说明需要翻墙。 
本文代码可在github下载。 
github地址

androidTV第一次创建(转:支持原创)的更多相关文章

  1. Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)

            Nokia的开源Qt开发工具正式发布了4.5版.如前所述,Qt 4.5最大的变动是换用LGPL许可证,目前采用的三个许可证分别为LGPL/GPL和商业许可证.           新版 ...

  2. 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像

    什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...

  3. 一个App Widget实例第一次创建时被调用

    事实上已经有很多的所谓的路由框架做到这一点,我也没有去研究别的,加上一直对backbone这个框架的评价不错,所以就琢磨着怎么用它实现我所需要的SPA的url管理了. 比如,你可能会说"如果 ...

  4. maven第一次创建项目太慢解决方法

    问题: 第一次用maven创建项目的时候,因为本地仓库中没有jar包,需要从中央仓库下载,所以会比较慢 解决方法: 因为从中央仓库下载默认使用的国外的镜像下载,速度比较慢,我们可以把镜像修改为从阿里云 ...

  5. 创建一个支持异步操作的operation

    NSOperationQueue时iOS中常用的任务调度机制.在创建一个复杂任务的时候,我们通常都需要编写NSOperation的子类.在大部分情况下,重写main方法就可以满足要求.main方法执行 ...

  6. git创建仓库,并提交代码(第一次创建并提交)(转)

    一直想学GIT,一直不曾学会.主要是GUI界面的很少,命令行大多记不住.今天尝试提交代码,按GIT上给的方法,没料到既然提交成功了. 于是把它记下来,方便以后学习. 代码是学习用的,没多大意义: 下图 ...

  7. 创建工程支持scala代码开发

    第一步:idea当中创建创建普通maven工程 File ==> New ==> Project 第二步:修改pom.xml添加scala的版本以及打包插件 <dependencie ...

  8. 创建一个支持ES6的Nodejs项目

    文章来自于:https://www.codementor.io/iykyvic/writing-your-nodejs-apps-using-es6-6dh0edw2o 第一步:创建项目文件夹并初始化 ...

  9. C和C++中动态链接库的创建和链接(原创,装载请注明原处)

    C和C++中动态链接库的创建和链接 1.创建DLL(动态链接库)-C++方式 1.创建DLL(动态链接库-C++方式) 1.在VS(以VS2017为例)中创建DLL动态链接库. 解决方案名称为:MyD ...

随机推荐

  1. C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载

    下载地址 ** dome **

  2. php socket的一些问题

    在php手册看到了php socket的例子 但有些socket_read的循环判断有一些问题 造成进程的阻塞 实例是用phpsocket实现 客户端连接到socket server 发送文本 接受文 ...

  3. C#写WPF程序,SQLSever2008 提示插入数据成功,却查询不到数据

    1.提示存储成功,但是数据库中没有数据.今天在用C#写一个wpf程序时,要向数据库Sql server2008 中插入数据,程序提示成功,但打开数据库却没有值; 经过查询发现,数据存储到默认路径下的数 ...

  4. DataTable模拟

    DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("timestep", Type.GetType(&qu ...

  5. 【leetcode❤python】 414. Third Maximum Number

    #-*- coding: UTF-8 -*- #l1 = ['1','3','2','3','2','1','1']#l2 = sorted(sorted(set(l1),key=l1.index,r ...

  6. uploadify springMVC

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. Linux Shell 文本处理工具集锦

    本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

  8. hihoCoder太阁最新面经算法竞赛18

    比赛链接:http://hihocoder.com/contest/hihointerview27/problems A.Big Plus 模拟水 #include <bits/stdc++.h ...

  9. windows下安装redis和memcached

    redis安装: http://www.68idc.cn/help/server/20141128135092.html phpredis下载地址:https://github.com/phpredi ...

  10. 【WEB】HTTP协议

    http1.0和http1.1 区别,http1.1可以发送多个http请求